靜態代碼塊和非靜態代碼塊的比較


非靜態代碼塊如:

 

[java]  view plain  copy
 
  1. {  
  2.     System.out.println("2");  
  3. }  

以上代碼塊就是非靜態的代碼塊,請注意這里的方法名、作用域、返回值、參數一概沒有,非靜態代碼塊會在每次類被調用或者被實例化時就會被執行。

 

靜態代碼塊如:

 

[java]  view plain  copy
 
  1. static {  
  2.         System.out.println("3");  
  3.     }  

上面的代碼塊就是靜態的代碼塊,同樣沒有方法名、作用域、返回值以及參數,靜態代碼塊類似於靜態變量,不論類被調用多少次,該區域代碼只在第一次時執行一次

 

大家可以通過下面的代碼做進一步的測試

 

[java]  view plain  copy
 
  1. public class test1 {  
  2.   
  3.     public static void main(String[] args) {  
  4.         // TODO Auto-generated method stub  
  5.         new test1();  
  6.         new test1();  
  7.     }  
  8.       
  9.     {  
  10.         System.out.println("2");  
  11.     }  
  12.     static {  
  13.         System.out.println("3");  
  14.     }  
  15.       
  16.     public test1(){  
  17.         System.out.println("1");  
  18.     }  
  19.   
  20. }  

輸出結果為

 

3
2
1
2
1

從結果中發現靜態代碼塊以及非靜態代碼塊都會在構造函數前執行,首次訪問時,靜態代碼塊會在非靜態代碼塊前執行

靜態代碼塊是在類加載時自動執行的,非靜態代碼塊是在創建對象時自動執行的代碼,不創建對象不執行該類的非靜態代碼塊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM