如果构造器中有相同的语句,可以将其放入一个代码块中,这样的话不管我们调用哪个构造器,都会优先调用代码块的内容,代码块的调用顺序优先于构造器。
(静态)方法只有在被调用时才执行,类加载时不执行
1.static代码块是在类加载的时候执行,只执行一次
2.普通代码块是在创建对象的时候调用的,创建一次调用一次
3.类加载的三种情况:
(1)创建对象实例时(new)
(2)创建子类的对象实例,父类也会被加载(父类先加载,子类后加载)
(3)使用类的静态成员时
4.在创建一个对象时,在同一个类中各部分的调用顺序:
(1)调用静态代码块和静态属性的初始化(两者优先级一致,按定义顺序调用)
(2)调用静普通代码块和普通属性的初始化(两者优先级一致,按定义顺序调用)
(3)调用构造方法
5.构造器的最前面隐藏了 super()(调用父类的无参构造器)和调用普通代码块以及普通属性的加载,
静态成员(属性、方法、代码块)在类加载时执行,
因此优先于构造器和普通代码块执行。
执行结果:
6.当创建一个有继承关系的子类时,各部分调用顺序:
(1)父类的静态代码块和静态属性(两者优先级一致,按定义顺序调用)
(2)子类的静态代码块和静态属性(两者优先级一致,按定义顺序调用)
(3)父类的普通代码块和静态属性(两者优先级一致,按定义顺序调用)
(4)父类构造器
(5)子类的普通代码块和静态属性(两者优先级一致,按定义顺序调用)
(6)子类构造器
7.静态代码块只能调用静态成员(属性和方法),普通代码块可以调用任意成员(属性和方法)。