靜態初始化塊與非靜態初始化塊有什么區別?


  所謂“塊”,就是用{}所包含的代碼段,它們在邏輯上常常是一個整體。初始化塊主要用於對象的初始化操作,在創建對象時調用,可以用於完成初始化屬性值、加載其他類等功能。初始化塊的執行順序在構造方法之前,如果構造方法多次重載,此時可以考慮將構造方法中共通的代碼提到初始化塊中定義。

  非靜態初始化塊主要用於對象的初始化操作,在每次創建對象時都要調用一次,其執行順序在構造方法之前。由於非靜態成員不能在靜態方法中使用,同樣也不能在靜態初始化塊中,因此,靜態初始化塊主要用於初始化靜態變量和靜態方法。靜態初始化塊只調用一次,是在類被第一次加載到內存時,並非要創建對象才執行。

import org.junit.Test; public class EqualsTest { @Test public void test(){ Print test1 = new Print(); Print test2 = new Print(); } } class Print{ { System.out.println("非靜態代碼塊"); } static{ System.out.println("靜態代碼塊"); } }

結果:

  靜態初始化塊與非靜態初始化塊有一定的區別,靜態的初始化塊比非靜態初始化塊執行要早,而且靜態初始化塊只執行一次,非靜態的初始化塊可執行多次。靜態初始化塊的執行時機需要注意,它在類加載器第一次加載類時調用,不一定非要創建對象,例如使用類名.靜態方法名。


免責聲明!

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



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