我不太明白括号括起来的代码的目的

时间:2021-07-23 23:25:24

标签: java

我只是在玩整数数组,发现以下不会编译多个错误:

   public class GetData{
   int[]       arr = new int[5];
   arr[0] = 30;
                    }

但是如果我在它编译的代码周围添加一些括号:

   public class GetData{
   {
   int[]       arr = new int[5];
   arr[0] = 30;
   }                    }

可能有一些我不理解的基本原理。 我不明白为什么第一个代码部分不会编译。

1 个答案:

答案 0 :(得分:2)

一个类不能只包含代码。它只能包含:

  • 类(所谓的内部类)
  • 分号。这些不做任何事情,但 class Foo { ;;; } 编译。
  • 方法。
  • 字段声明。
  • 初始化器。
  • 构造函数。

当然还有评论,它可以出现在任何地方。

至关重要的是,int[] arr = new int[5]; 是一个字段声明,因此是合法的:它声明了一个名为 arr 的字段,类型为 int[],带有一个初始化表达式。< /p>

arr[0] = 30; 另一方面,是赋值表达式,也就是代码。这在这里是不合法的。您需要将其推送到方法或构造函数等中。

类中的

{} 是一个奇特的 java 构造,很少使用:实例初始值设定项。它与构造函数非常相似。

这解释了为什么你的第二个片段编译:第一批括号定义'这些是包围这个类定义内容的括号',里面的括号定义:“这个括号代码是一个实例初始值设定项”。 arr[0] = 30; 在它们中是合法的,但这不是您通常会放在那里的 Java 代码,这些东西应该放在一个方法中:

public class GetData /* not a good name! */ {
    public void doStuff() {
        int[] arr = new int[5];
        arr[0] = 30;
    }
}

编译得很好。