在Java中对此结果的解释是什么?

Moh*_*oud 1 java

我有以下代码:

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行中没有非法的前向引用?这两个代码看起来与我类似.

SLa*_*aks 6

方法可以在声明之前使用.

private int j = 10;是一个必须在某个时间点执行的可执行语句.因此,字段声明的顺序是有意义的.

方法声明本身不可执行.
因此,方法的排序完全没有意义.

  • `return j;`在方法为_called_时执行,而不是在_defined_时执行.将方法移到别处不会有任何区别. (2认同)