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

时间:2019-06-10 10:39:39

标签: java variables methods

我正在研究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;
}

变量的声明顺序在这里起什么作用?

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

1 个答案:

答案 0 :(得分:5)

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

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

关于将按照初始化顺序加载的属性,在第二个示例中会出错,因为如果颠倒顺序num2可以正常工作,则会在num1之前提到int num2 = 5; int num1 = num2;

components(separatedBy)

有关更多详细信息,请查看12.4.2. Detailed Initialization Procedure

相关问题