类初始化可分为自动初始化和手动初始化。如果未指定初始化,则按默认值初始化。
类的初始化顺序即类内部的执行顺序。
类的初始化遵循两个原则:
- 先静态后非静态
- 先字段后构造器
public class Example {
public static void main(String[] args) { //(1)
new Test(); //(2)
}
static test1 = new Test(1); //(3)
}
class Test {
public int first; //(4)
public static int last; //(5)
public Test(int num) { //(6)
this.first = num;
}
}
当类加载器加载Example类时,在Example内部依次执行(3) -> (1) -> (2);当类Test被加载时,在内部依次执行(5) -> (4) -> (6)。
静态字段仅在类加载的时候被初始化且只执行一次。因此,当执行语句(2)时,实例化Test对象时仅执行语句(4)和(6),语句(5)不再执行。