我有以下代码:
public class Main {
private int i = j; //1
private int j = 10;
public static void main(String[] args) {
System.out.println((new Main()).i);
}
}
Run Code Online (Sandbox Code Playgroud)
并且第1行中存在编译器错误,因为非法转发引用.
但是,当我尝试以下代码时:
public class Main {
int i = getJ(); //1
int getJ(){
return j;
}
int j=10;
public static void main(String[] args) {
System.out.println(new Main().i);
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,结果为0.
为什么第1行中没有非法的前向引用?这两个代码看起来与我类似.
方法可以在声明之前使用.
private int j = 10;是一个必须在某个时间点执行的可执行语句.因此,字段声明的顺序是有意义的.
方法声明本身不可执行.
因此,方法的排序完全没有意义.