java靜態塊是在類加載時自動執行的,非靜態代碼塊是在建立對象時自動執行的代碼。不建立對象不執行該類的非靜態代碼塊。順序是靜態塊-->非靜態塊-->構造函數。java
靜態代碼塊只在第一次new時執行一次,而非靜態代碼塊每new一次就執行一次。ide
父類:函數
package test; public abstract class fu { private int age; public abstract void test(); static { System.out.println("這是父類靜態代碼塊"); } public fu(){ System.out.println("這是父類構造函數"); } { System.out.println("這是父類非靜態代碼塊"); } } 子類: package test; public class zi extends fu{ static{ System.out.println("這是子類靜態代碼塊"); } public zi(){ System.out.println("這是子類構造函數"); } { System.out.println("這是子類非靜態代碼塊"); } @Override public void test() { System.out.println("這是子類方法"); } } Main函數 package test; public class Main { public static void main(String[] args) { fu zi=new zi(); zi.test(); } }
結果:code
這是父類靜態代碼塊對象
這是子類靜態代碼塊class
這是父類非靜態代碼塊test
這是父類構造函數構造函數
這是子類非靜態代碼塊方法
這是子類構造函數static
這是子類方法