JAVA学习第二篇;类初始化顺序
2017-08-09 16:54
225 查看
1,类初始化顺序是运行代码时的关键逻辑,本文分析了一些情况下的类初始化的顺序,类初始化分为主动和被动初始化。
2,主动初始化
2.1 创建对象 new A(),如
new A();//A extends B
则会先初始化B,然后再初始化A
2.2 调用类的静态域(常量域除外),如
class B{
}
class A extends B{
public static int FOO=1;
}
System.out.println(A.FOO);
此时,会先调用B的初始化,再调用A的初始化
class B{
}
class A extends B{
public static final int FOO=1;
}
System.out.println(A.FOO);
此时,不会初始化A,B。
2.3 通过反射调用,如
class B{
}
class A extends B{
public static int FOO=1;
}
Class.forName("A");
此时,会先调用B的初始化,再调用A的初始化
3,被动初始化
3.1 调用类的静态域,只有实际调用的类才初始化,如
class B{
public static int FOOO=0;
}
class A extends B{
public static int FOO=1;
}
System.out.println(A.FOOO);
此时,A继承B,通过调用 A的FOOO方法,实际是调用B的FOOO方法,只初始化B
3.2 引用常量不会引起类的初始化,如2.2
2,主动初始化
2.1 创建对象 new A(),如
new A();//A extends B
则会先初始化B,然后再初始化A
2.2 调用类的静态域(常量域除外),如
class B{
}
class A extends B{
public static int FOO=1;
}
System.out.println(A.FOO);
此时,会先调用B的初始化,再调用A的初始化
class B{
}
class A extends B{
public static final int FOO=1;
}
System.out.println(A.FOO);
此时,不会初始化A,B。
2.3 通过反射调用,如
class B{
}
class A extends B{
public static int FOO=1;
}
Class.forName("A");
此时,会先调用B的初始化,再调用A的初始化
3,被动初始化
3.1 调用类的静态域,只有实际调用的类才初始化,如
class B{
public static int FOOO=0;
}
class A extends B{
public static int FOO=1;
}
System.out.println(A.FOOO);
此时,A继承B,通过调用 A的FOOO方法,实际是调用B的FOOO方法,只初始化B
3.2 引用常量不会引起类的初始化,如2.2
相关文章推荐
- java学习个人笔记---类成员变量初始化顺序
- Java学习笔记二十三:Java的继承初始化顺序
- Java基础随笔-对初始化顺序的学习
- Java学习笔记(1) 对象初始化顺序
- java学习笔记----初始化顺序
- 学习整理——Java类初始化顺序
- java学习个人笔记---java类总体初始化顺序
- Java学习总结6——类加载1(类初始化顺序)
- java学习笔记3:对象的初始化顺序
- JAVA基础学习(六)---面向对象二---static,类的初始化和调用顺序、单例模式
- java学习笔记4:对象的初始化顺序(官方实例)
- 【java学习】java初始化顺序
- 【Java学习笔记】类初始化执行顺序
- Java继承 学习 && 类初始化顺序
- Java学习记录(一):Java中继承与静态static、非静态、构造方法等的初始化顺序
- Thinking in Java [Java编程机制] 学习笔记 -- 初始化顺序Order of initialization
- JAVA初始化顺序
- JAVA笔试之初始化顺序
- 关于java初始化顺序的一个示例