问题描述
- 我这有段代码,我对于它的执行顺序存在疑惑,为什么在父类中创建对象的操作会先于构造器执行?
-
public class Test {
Person person = new Person("Test");
static{
System.out.println("test static");
}
public Test() {
System.out.println("test constructor");
}public static void main(String[] args) {
new MyClass();
}
}
class Person{
static{
System.out.println("person static");
}
public Person(String str) {
System.out.println("person"+str);
}
}
class MyClass extends Test {
Person person = new Person("MyClass");
static{
System.out.println("myclass static");
}
public MyClass() {
System.out.println("myclass constructor");
}
}test static
myclass static
person static
person Test
test constructor
person MyClassmyclass constructor
Person person = new Person("Test");先执行了然后才执行了Test的构造器
解决方案
java初始化顺序如下:
父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
父类--变量 (Person person = new Person("Test");)
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器
解决方案二:
肯定时先变量再构造器啊,否则构造器没法使用变量,还怎么“构造”?