摘要:對靜態代碼塊執行時機的認識類的生命周期包括加載驗證準備解析初始化使用卸載等七個階段,其中驗證準備和解析三個部分統稱為連接。初始化的時候會包含靜態代碼塊的執行和靜態變量的賦值初始化在裝載時不是必須觸發的,保證在初次主動使用對象前會觸發。
對靜態代碼塊執行時機的認識
類的生命周期包括加載(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸載(Unloading)等七個階段,其中驗證、準備和解析三個部分統稱為連接(Linking)。而類的加載指的就是從加載到初始化這五個階段。
初始化的時候會包含靜態代碼塊的執行和靜態變量的賦值
初始化在裝載時不是必須觸發的,保證在初次主動使用對象前會觸發。
例:
class A{ static{ System.out.print("1"); } public A(){ System.out.print("2"); } } class B extends A{ static{ System.out.print("a"); } public B(){ System.out.print("b"); } } public class Hello { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub A ab = new B(); ab = new B(); } }
靜態代碼塊和非靜態代碼塊的區別輸出結果: 1a2b2b
靜態代碼塊,在虛擬機加載類的時候就會加載執行,而且只執行一次;
非靜態代碼塊,在創建對象的時候(即new一個對象的時候)執行,每次創建對象都會執行一次
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/65279.html
摘要:構造塊優先于構造函數執行,如果存在多個構造代碼塊,則執行順序按照定義的順序依次執行。靜態代碼塊在中使用關鍵字聲明的代碼塊。同步代碼塊需要寫在方法中。 代碼塊 在java中用{}括起來的稱為代碼塊,代碼塊可分為以下四種: 普通代碼塊 構造代碼塊 靜態代碼塊 同步代碼塊 普通代碼塊 在方法或語句中出現的{}就稱為普通代碼塊。普通代碼塊和一般語句的執行順序由他們在代碼中出現的次序決定,先...
摘要:與的差異為解釋性語言而為編譯型語言。為面向對象語言,則兼具面向過程和面向過程編程的特點。就垃圾回收而言,中有析構函數,而則是方法。提供了分布式對象的等庫。公眾號貓說現架構設計碼農兼創業技術顧問,不羈平庸,熱愛開源,雜談程序人生與不定期干貨。 本博客 貓叔的博客,轉載請申明出處 前言 本系列為貓叔綜合整理的Java面試題系列,如有雷同不勝榮幸。 Java與C/C++的差異? 1、jav...
摘要:在寫單例模式的代碼之前,我們先簡單了解一下兩個知識點,關于類的加載順序和關鍵字。懶漢和餓漢在程序編寫上,一般將單例模式分為兩種,分別是餓漢式和懶漢式,餓漢式在類加載時就完成了初始化,所以類加載比較慢,但獲取對象的速度快。 定義 單例模式是比較常見的一種設計模式,目的是保證一個類只能有一個實例,而且自行實例化并向整個系統提供這個實例,避免頻繁創建對象,節約內存。 單例模式的應用場景很多, 比如...
摘要:根據出現的位置,作為對象的默認引用有兩種情形構造器中引用該構造器正在初始化的對象。在構造器中代表該構造器正在初始化的對象。用于限定該對象調用它從父類得到的實例變量和方法。 子類繼承父類就可以繼承到父類的成員變量和方法。如果訪問控制允許,子類實例可以直接調用父類里定義的方法。 如果多個重載的構造器里包含了相同的初始化代碼,則可以把這些初始化代碼放置在普通代碼塊里完成,初始化塊總在構...
閱讀 1941·2021-10-11 10:59
閱讀 1046·2021-09-07 09:59
閱讀 2244·2021-08-27 16:17
閱讀 2796·2019-08-30 15:54
閱讀 2286·2019-08-30 12:58
閱讀 1786·2019-08-30 12:53
閱讀 1479·2019-08-28 18:13
閱讀 740·2019-08-26 13:35