通過java字節(jié)碼分析學(xué)習(xí)對象初始化順序
mockery.checking(new Expectations() {
{
one(new Object()).toString();
will(returnValue(""));
}
});
下面寫一個(gè)寫一個(gè)簡單的類演示這個(gè)例子
public class Test {
int i = 1;
{
int j = 1;
System.out.println(j);
}
public Test(){
i = 2;
}
static{
}
}
以前一直使用static{}代碼快,原來可以直接寫{}代碼塊
通過對java字節(jié)碼分析,發(fā)現(xiàn)代碼的執(zhí)行順序如下:
1 首先是執(zhí)行對象的構(gòu)造器方法,創(chuàng)建一個(gè)空的對象,然后對對象的字段i賦予默認(rèn)值。也就是先執(zhí)行 i = 0 (這一部應(yīng)該是原子性的)
2 然后依次對字段進(jìn)行賦值,在我們這個(gè)例子里面,只有一個(gè)字段i,所以執(zhí)行 i = 1,這個(gè)是字段初始化過程
4 字段初始化完成之后再 執(zhí)行類的{}語句塊,如果有多個(gè){}語句塊,則按照代碼順序依次執(zhí)行
3 {}語句執(zhí)行完成之后,則執(zhí)行構(gòu)造器方法i = 2
相關(guān)文章
解決SpringBoot使用@Value獲取不到y(tǒng)aml中配置值的問題
在最近的開發(fā)中遇到一個(gè)問題,使用@Value獲取yml文件中配置的屬性時(shí)始終獲取不到值,所以本文給大家詳細(xì)介紹了SpringBoot使用@Value獲取不到y(tǒng)aml中值的問題分析及解決方法,需要的朋友可以參考下2024-01-01Java中xxl-job實(shí)現(xiàn)分片廣播任務(wù)的示例
本文主要介紹了Java中xxl-job實(shí)現(xiàn)分片廣播任務(wù)的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03SpringBoot項(xiàng)目中集成Apollo的方法步驟
本文主要介紹了SpringBoot項(xiàng)目中集成Apollo的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-10-10Mybatis查詢數(shù)據(jù)的項(xiàng)目實(shí)現(xiàn)
MyBatis通過XML配置文件或注解,把Java對象映射到對應(yīng)的數(shù)據(jù)庫表中,實(shí)現(xiàn)對象關(guān)系和數(shù)據(jù)關(guān)系的互相轉(zhuǎn)換,從而使得Java應(yīng)用程序能夠更簡單的操作和讀取數(shù)據(jù)庫,本文就詳細(xì)的介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2023-09-09OpenFeign在傳遞參數(shù)為對象類型是為空的問題
這篇文章主要介紹了OpenFeign在傳遞參數(shù)為對象類型是為空的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Java介紹多線程計(jì)算階乘實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了Java多線程計(jì)算階乘的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06