为什么在声明之前在Java中提供了一种方法?

Aur*_*uro 3 java variables methods

我正在经历hoistingJavaScript中的概念,在该概念中,所有函数和变量声明在执行任何操作之前都已吊起,这就是为什么函数在其实际声明部分之前可用的原因。

让我想知道它在Java中是如何工作的。

考虑以下代码:

package declarationOrder;

public class Main {

    int num = init();

    int init() {
        return 5;
    }
}
Run Code Online (Sandbox Code Playgroud)

init()在到达其声明部分之前,该方法到底可用于调用的方式如何?

考虑另一个示例:

package declarationOrder;

public class Main {

    int num1 = num2; // compiler error
    int num2 = 5;
}
Run Code Online (Sandbox Code Playgroud)

变量的声明顺序在这里如何起作用?

为什么以及如何区别对待该方法?

YCF*_*F_L 5

编译器遵循以下顺序在Java类中加载内容(属性,方法,静态块等):

在您的情况下,方法是第一个被加载的方法,然后是类属性。

关于将按初始化顺序加载的属性,在第二个示例中会出现错误,因为如果您按相反的顺序进行操作,num2前面已经提到过num1它会正常工作:

int num2 = 5;
int num1 = num2;
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参见12.4.2。详细的初始化程序