与构造函数相比,什么时候初始化类顶部的变量?
对不起,我是这个意思:
public class aClass {
private int num;
public aClass {...}
最佳答案
默认值(对象字段为null
,原始字段为0
等)在技术上从未明确分配就发出的字节码而言。 (这是在对象实例化期间“内部”完成的,在任何初始化程序/构造函数代码运行之前。)
在每个构造函数的开头“复制”实例字段的显式初始化代码,在类中由编译器调用父类(super class)构造函数(如果有)之后。代码示例:
class Foo {
int bar = 123;
public Foo() {
// ...
}
public Foo(int bar) {
this.bar = bar;
// ...
}
}
被编译成字节码等同于:
class Foo {
int bar;
public Foo() {
this.bar = 123;
// ...
}
public Foo(int bar) {
this.bar = 123;
this.bar = bar;
// ...
}
}
初始化 block 也是如此。这意味着这些变量在任何普通构造函数代码执行之前得到初始化。
关于java - 全局变量和构造函数(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15328992/