Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么方法在声明之前在Java中可用?_Java_Variables_Methods - Fatal编程技术网

为什么方法在声明之前在Java中可用?

为什么方法在声明之前在Java中可用?,java,variables,methods,Java,Variables,Methods,我在JavaScript中介绍了提升的概念,在JavaScript中,所有函数和变量声明都是在执行之前提升的,这就是为什么函数在其实际声明部分之前可用的原因 让我想知道它在Java中到底是如何工作的 考虑以下代码: package declarationOrder; public class Main { int num = init(); int init() { return 5; } } 方法init()在到达其声明部分之前,如何准确地用于调

我在JavaScript中介绍了提升的概念,在JavaScript中,所有函数和变量声明都是在执行之前提升的,这就是为什么函数在其实际声明部分之前可用的原因

让我想知道它在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;
}
变量的声明顺序是如何在这里起作用的


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

编译器按照顺序在Java类中加载内容(属性、方法、静态块等):

在您的例子中,方法是第一个加载的方法,然后是类属性

关于将按初始化顺序加载的属性,在第二个示例中会出现一个错误,因为前面提到了
num2
,如果颠倒顺序,它将正常工作:

int num2 = 5;
int num1 = num2;

有关更多详细信息,请参阅