靜態代碼塊
靜態代碼塊 static { }
非靜態代碼塊 { }
靜態代碼塊和非靜態代碼塊的異同點如下:
相同點:都是JVM加載類時且在構造函數執行之前執行,在類中都可以定義多個,一般在代碼塊中對一些static變量進行賦值。
不同點:靜態代碼塊在非靜態代碼塊之前執行(靜態代碼塊 > 非靜態代碼塊)。靜態代碼塊只在第一次new時執行一次,之後不再執行。而非靜態代碼塊每new一次就執行一次。
創建父類,寫入 靜態代碼塊和非靜態代碼塊
public class Parent {
public Parent(){
System.out.println("父類的無參");
}
public Parent(String a){
System.out.println("父類的有參");
}
static {
System.out.println("父類的靜態代碼塊");
}
{
System.out.println("父類的非靜態代碼塊");
}
}
子類
public Son(){
System.out.println("子類的無參");
}
public Son(String A){
System.out.println("子類的有參");
}
static {
System.out.println("子類的靜態代碼塊");
}
{
System.out.println("子類的非靜態代碼塊");
}
Test
public class Test {
public static void main(String[] args) {
Son son = new Son();
System.out.println("*****");
Son sons = new Son("yy");
System.out.println("*****");
}
}
結果
說明:
靜態代碼塊是在類加載時自動執行的,非靜態代碼塊在創建對象自動執行的代碼,不創建對象不執行該類的非靜態代碼塊。 順 序: 靜態代碼塊 –>非靜態代碼塊 –>類構造函數。