摘要:對(duì)靜態(tài)代碼塊執(zhí)行時(shí)機(jī)的認(rèn)識(shí)類的生命周期包括加載驗(yàn)證準(zhǔn)備解析初始化使用卸載等七個(gè)階段,其中驗(yàn)證準(zhǔn)備和解析三個(gè)部分統(tǒng)稱為連接。初始化的時(shí)候會(huì)包含靜態(tài)代碼塊的執(zhí)行和靜態(tài)變量的賦值初始化在裝載時(shí)不是必須觸發(fā)的,保證在初次主動(dòng)使用對(duì)象前會(huì)觸發(fā)。
對(duì)靜態(tài)代碼塊執(zhí)行時(shí)機(jī)的認(rèn)識(shí)
類的生命周期包括加載(Loading)、驗(yàn)證(Verification)、準(zhǔn)備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸載(Unloading)等七個(gè)階段,其中驗(yàn)證、準(zhǔn)備和解析三個(gè)部分統(tǒng)稱為連接(Linking)。而類的加載指的就是從加載到初始化這五個(gè)階段。
初始化的時(shí)候會(huì)包含靜態(tài)代碼塊的執(zhí)行和靜態(tài)變量的賦值
初始化在裝載時(shí)不是必須觸發(fā)的,保證在初次主動(dòng)使用對(duì)象前會(huì)觸發(fā)。
例:
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(); } }
靜態(tài)代碼塊和非靜態(tài)代碼塊的區(qū)別輸出結(jié)果: 1a2b2b
靜態(tài)代碼塊,在虛擬機(jī)加載類的時(shí)候就會(huì)加載執(zhí)行,而且只執(zhí)行一次;
非靜態(tài)代碼塊,在創(chuàng)建對(duì)象的時(shí)候(即new一個(gè)對(duì)象的時(shí)候)執(zhí)行,每次創(chuàng)建對(duì)象都會(huì)執(zhí)行一次
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/65279.html
摘要:構(gòu)造塊優(yōu)先于構(gòu)造函數(shù)執(zhí)行,如果存在多個(gè)構(gòu)造代碼塊,則執(zhí)行順序按照定義的順序依次執(zhí)行。靜態(tài)代碼塊在中使用關(guān)鍵字聲明的代碼塊。同步代碼塊需要寫在方法中。 代碼塊 在java中用{}括起來(lái)的稱為代碼塊,代碼塊可分為以下四種: 普通代碼塊 構(gòu)造代碼塊 靜態(tài)代碼塊 同步代碼塊 普通代碼塊 在方法或語(yǔ)句中出現(xiàn)的{}就稱為普通代碼塊。普通代碼塊和一般語(yǔ)句的執(zhí)行順序由他們?cè)诖a中出現(xiàn)的次序決定,先...
摘要:第一章面向?qū)ο笮“资且婚T完全面向?qū)ο蟮木幊陶Z(yǔ)言嗯什么是面向過(guò)程什么又是面向?qū)ο竽卮罄性谖覀冋竭M(jìn)入學(xué)習(xí)這部分前,了解一下面向過(guò)程和面向?qū)ο筮@兩個(gè)概念,對(duì)于我們接下來(lái)的學(xué)習(xí)有很大的好處。這一部分我們會(huì)在面向?qū)ο髮W(xué)習(xí)結(jié)束后進(jìn)行系統(tǒng)的整理和總結(jié)。 showImg(https://segmentfault.com/img/remote/1460000019303357); 第一章 面向?qū)ο?小...
摘要:與的差異為解釋性語(yǔ)言而為編譯型語(yǔ)言。為面向?qū)ο笳Z(yǔ)言,則兼具面向過(guò)程和面向過(guò)程編程的特點(diǎn)。就垃圾回收而言,中有析構(gòu)函數(shù),而則是方法。提供了分布式對(duì)象的等庫(kù)。公眾號(hào)貓說(shuō)現(xiàn)架構(gòu)設(shè)計(jì)碼農(nóng)兼創(chuàng)業(yè)技術(shù)顧問(wèn),不羈平庸,熱愛開源,雜談程序人生與不定期干貨。 本博客 貓叔的博客,轉(zhuǎn)載請(qǐng)申明出處 前言 本系列為貓叔綜合整理的Java面試題系列,如有雷同不勝榮幸。 Java與C/C++的差異? 1、jav...
摘要:在寫單例模式的代碼之前,我們先簡(jiǎn)單了解一下兩個(gè)知識(shí)點(diǎn),關(guān)于類的加載順序和關(guān)鍵字。懶漢和餓漢在程序編寫上,一般將單例模式分為兩種,分別是餓漢式和懶漢式,餓漢式在類加載時(shí)就完成了初始化,所以類加載比較慢,但獲取對(duì)象的速度快。 定義 單例模式是比較常見的一種設(shè)計(jì)模式,目的是保證一個(gè)類只能有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例,避免頻繁創(chuàng)建對(duì)象,節(jié)約內(nèi)存。 單例模式的應(yīng)用場(chǎng)景很多, 比如...
摘要:根據(jù)出現(xiàn)的位置,作為對(duì)象的默認(rèn)引用有兩種情形構(gòu)造器中引用該構(gòu)造器正在初始化的對(duì)象。在構(gòu)造器中代表該構(gòu)造器正在初始化的對(duì)象。用于限定該對(duì)象調(diào)用它從父類得到的實(shí)例變量和方法。 子類繼承父類就可以繼承到父類的成員變量和方法。如果訪問(wèn)控制允許,子類實(shí)例可以直接調(diào)用父類里定義的方法。 如果多個(gè)重載的構(gòu)造器里包含了相同的初始化代碼,則可以把這些初始化代碼放置在普通代碼塊里完成,初始化塊總在構(gòu)...
閱讀 1933·2021-10-11 10:59
閱讀 1040·2021-09-07 09:59
閱讀 2232·2021-08-27 16:17
閱讀 2790·2019-08-30 15:54
閱讀 2281·2019-08-30 12:58
閱讀 1780·2019-08-30 12:53
閱讀 1474·2019-08-28 18:13
閱讀 737·2019-08-26 13:35