Java 在声明之前分配一个静态变量
我正在学习Java并编写以下简单代码:Java 在声明之前分配一个静态变量,java,static,Java,Static,我正在学习Java并编写以下简单代码: public class Test { private int a = b; private final static int b = 10; public int getA() { return a; } } public class Hello { public static void main(String[] args) { Test test = new Test
public class Test {
private int a = b;
private final static int b = 10;
public int getA() {
return a;
}
}
public class Hello {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.getA());
}
}
结果:10。做得好!它运行成功,没有错误
有人能解释一下为什么我可以在声明静态变量之前分配它吗?在代码中声明变量的顺序实际上并不重要,因为实际上静态变量将在非静态变量之前初始化。分配
private int a = b;
在创建
Test
的新实例时发生(就在调用构造函数之前)
在加载类时,静态变量b
的声明和初始化在创建实例之前进行
语句的顺序无关紧要,因为静态变量总是先初始化。静态变量绑定到一个类,当然这个类总是在类的实例之前存在。因此,您可以自由地将其分配给实例字段。Java变量按以下顺序初始化:
希望这有帮助。您编写的代码运行良好,因为
private final static int b=10代码>
是类变量(静态字段)。首先初始化这些类型的变量
然后执行该行
private int a=b代码>
初始化实例变量(字段)a
简而言之,在代码中声明这些变量的顺序并不重要。类变量总是在实例变量之前声明。在创建任何实例之前加载类后,可能重复的静态成员已经初始化。您说的“声明前赋值”是什么意思?“intb”声明,“=10”赋值,所以在赋值之前先声明。或者你的意思是在声明之前使用?”(就在调用构造函数之前)“不完全是这样,字段的初始化被移动到构造函数中,所以更像是“调用构造函数时,但在其隐式或显式的super(参数)
call之后”。你能为我分享一些官方文档吗?我真的很想理解deeply@DatNguyen最正式的文件是JLS。阅读章节和。