我正在研究JavaScript中的hoisting
概念,其中所有函数和变量声明在执行任何操作之前都已被吊起,这就是为什么函数在其实际声明部分之前可用的原因。
让我想知道它在Java中是如何工作的。
考虑以下代码:
package declarationOrder;
public class Main {
int num = init();
int init() {
return 5;
}
}
方法init()
在到达其声明部分之前可用于呼叫的情况如何?
考虑另一个示例:
package declarationOrder;
public class Main {
int num1 = num2; // compiler error
int num2 = 5;
}
变量的声明顺序在这里起什么作用?
为什么和如何区别对待该方法?
答案 0 :(得分:5)
编译器遵循以下顺序在Java类中加载内容(属性,方法,静态块等):
在您的情况下,该方法是第一个被加载的方法,然后是类属性。
关于将按照初始化顺序加载的属性,在第二个示例中会出错,因为如果颠倒顺序num2
可以正常工作,则会在num1
之前提到int num2 = 5;
int num1 = num2;
:
components(separatedBy)
有关更多详细信息,请查看12.4.2. Detailed Initialization Procedure