關於虛擬機器載入類的先後順序測試

2022-07-26 11:54:11 字數 1004 閱讀 9724

有關虛擬機器的學習已在近期計畫中,書籍已買,但尚未進行.今天準備研讀spring的事務相關原始碼,隨即複習了一下相關知識.看到一位前輩在github上的**,非常有意思,特記下筆記,以供學習和後期複習:

public

class

datasourcefactory

public

static

datasource createdatasource()

}

以上為相關**,寫法可以優化,比如講資料庫連線引數寫到配置檔案裡.

但我想記錄的是:

這裡利用了虛擬機器載入類的先後順序和特性:虛擬機器載入類的時候,@1.先載入該類的靜態常量和變數(靜態常量和變數按順序載入),@2.然後載入靜態**塊,@3.最後再載入其它部分。

而且,靜態常量和靜態**塊只在載入類的時候執行一次,new 新的物件的時候不再執行.

因此,此處** 在載入的時候,直接將引數一起載入了,其它類 直接呼叫該類的 createdatasource()方法,即可獲取資料庫連線物件;

以下是我寫的乙個簡單的demo,來印證以上描述:

public

class

statictest

public

static

void

main(string args)

public

void

test ()

static

class

a }

}

以上為demo**,

以下為執行輸出內容:

btest

atest

i am statics's code

i am not statics's code

i am not statics's code

,無論新建該類的多少個物件,該類的 靜態變數和靜態常量還有靜態**塊只執行一次.

不得不感嘆的是:靈活運用是王道!

Java虛擬機器載入類的順序

虛擬機器載入類的先後順序和特性 虛擬機器載入類的時候,1.先載入該類的靜態常量和變數 靜態常量和變數按順序載入 2.然後載入靜態 塊,3.最後再載入其它部分。而且,靜態常量和靜態 塊只在載入類的時候執行一次,new 新的物件的時候不再執行.public class statictest public...

關於 define 定義的先後順序

define定義先後順序 今天檢視 的過程中,看到如下巨集的定義 size of malloc pool define cfg malloc len cfg env size 1024 1024 define cfg env size 0x4000 給我的第一感覺就是,是不是其他地方有cfg env...

關於java的類例項化的先後順序

最近有同事在部署乙個舊系統的時候遇到問題,在本地部署是沒事的,但一到正式線上伺服器就報錯。報錯的大概意思就是某個類裡面的乙個靜態變數為空導致出現空指標異常。為了幫忙解決這個問題,我再詳細地深入 然後模擬實際情況建立如下類 1.定義了乙個載入配置檔案的類test1,使用spring註解 service...