我們來看一段代碼,下面的代碼一目了然
class A{ static int i=0; static { System.out.println("靜態代碼塊A"); } public A(){ System.out.println("構造方法A"); } { System.out.println("代碼塊A"); } static { i++; System.out.println("在類A中靜態變量i="+i); } } public class B extends A{ static { System.out.println("靜態代碼塊B"); } public B(){ System.out.println("構造方法B"); } { System.out.println("代碼塊B"); } public static void main(String[] args) { System.out.println("main方法"); new B(); System.out.println("--------------------"); new B(); } static { i++; System.out.println("在類B中靜態變量i="+i); } }
執行結果
我們可以得出以下結論
- 靜態變量是全局變量
- 靜態方法在類加載時被執行,只會被執行一次
- 靜態變量和靜態方法按照聲明的順序依次執行
- 父類的靜態方法>子類的靜態方法>Main函數>父類的代碼塊>父類的構造方法>子類的代碼塊>子類的構造方法