1、类初始化<clint>
- 静态变量的显示初始化代码
- 静态代码块
注意:一二的顺序从上到下,当一个类初始化时,若父类未初始化,则先初始化父类。(线程安全的)
1.1 那些操作会导致类的 初始化:
-
主方法所在的类,直接初始化
-
new对象时
-
调用类的静态方法和静态变量时【final除外】
-
使用java.lang.reflect包的方法对类进行初反射调用
-
当初始化一个类,而其父类未初始化时,先初始化他的父类
1.2 那些操作不会导致类的初始化:
-
引用静态常量
-
当访问一个静态域时,只有真正声明这个类域的类才会被初始化,即通过子类访问父类的静态域时,只会初始化父类
-
进行数组定义类引用,不会触发此类的初始化
2、实例初始化<init>
子类初始化时,先初始化父类,每个类有多个实例化方法,一个构造器对应一个实例化方法<init>()由三部分组成
-
非静态属性的显性赋值
-
非静态代码块
-
构造器