我只是在玩整数数组,发现以下不会编译多个错误:
public class GetData{
int[] arr = new int[5];
arr[0] = 30;
}
但是如果我在它编译的代码周围添加一些括号:
public class GetData{
{
int[] arr = new int[5];
arr[0] = 30;
} }
可能有一些我不理解的基本原理。 我不明白为什么第一个代码部分不会编译。
答案 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;
}
}
编译得很好。