1、static修飾的東西都是屬於類一級別的,當類加載時會順序加載類變量、構造代碼塊以及類方法。
2、在子類創建對象(實例化)時先加載父類static代碼再去加載子類的static代碼,也反映出了子類和父類的加載順序。
3、構造塊的執行的優先級要大於構造函數的。
4、在子類創建對象時會調用父類的無參構造方法。
下面是一個測試demo:
public class Test {
static String str ="test";
String name;
public Test(){
System.out.println("父類構造方法");
}
static{
System.out.println("父類靜態代碼塊");
if ("test".equals(str)){
System.out.println("順序加載");
}
}
{
System.out.println("父類構造塊");
}
public static void main(String[] args) {
//實例化一個SubClass
new SubClass();
}
}
class SubClass extends Test{
SubClass(){
System.out.println("子類構造方法");
}
static{
System.out.println("子類靜態代碼塊");
}
{
System.out.println("子類構造塊");
}
}
執行結果:
父類靜態代碼塊
順序加載
子類靜態代碼塊
父類構造塊
父類構造方法
子類構造塊
子類構造方法