Java学习笔记,
分享于 点击 13502 次 点评:123
Java学习笔记,
Java学习笔记 001 Java初始化顺序 class Dog {
public Dog() {
System.out.println("Dog");
}
static{
System.out.println("super static block");
}
{
System.out.println("super block");
}
}
public class Mastiff extends Dog {
public Mastiff() {
System.out.println("Mastiff");
}
{
System.out.println("block");
}
static {
System.out.println("static block");
}
public static void main(String[] args){
Mastiff mastiff1=new Mastiff();
Mastiff mastiff2=new Mastiff();
Dog dog1=new Dog();
Dog dog2=new Dog();
}
} <pre name="code" class="java">输出:
super static block
static block
super block
Dog
block
Mastiff
super block
Dog
block
Mastiff
super block
Dog
super block
Dog
由此可以得出结论: a 静态成员变量首先初始化(注意,Static可以看做一个静态成员,其执行顺序和其在类中申明的顺序有关) b 普通成员初始化 c 执行构造函数。
对于静态成员(static块可以看成普通的一个静态成员,其并不一定在类初始化时首先执行)和普通成员,其初始化顺序只与其在类定义中的顺序有关,和其他因素无关
由此得出Java初始化顺序结论: 1 继承体系的所有静态成员初始化(先父类,后子类) 2 父类初始化完成(普通成员的初始化-->构造函数的调用) 3 子类初始化(普通成员-->构造函数) Java初始化顺序如图:
实例化具体对象时:静态成员只会被初始化一次,其他成员(无论父子类)都会初始化多次。
相关文章
- 暂无相关文章
用户点评