通過java字節(jié)碼分析學習對象初始化順序
mockery.checking(new Expectations() {
{
one(new Object()).toString();
will(returnValue(""));
}
});
下面寫一個寫一個簡單的類演示這個例子
public class Test {
int i = 1;
{
int j = 1;
System.out.println(j);
}
public Test(){
i = 2;
}
static{
}
}
以前一直使用static{}代碼快,原來可以直接寫{}代碼塊
通過對java字節(jié)碼分析,發(fā)現代碼的執(zhí)行順序如下:
1 首先是執(zhí)行對象的構造器方法,創(chuàng)建一個空的對象,然后對對象的字段i賦予默認值。也就是先執(zhí)行 i = 0 (這一部應該是原子性的)
2 然后依次對字段進行賦值,在我們這個例子里面,只有一個字段i,所以執(zhí)行 i = 1,這個是字段初始化過程
4 字段初始化完成之后再 執(zhí)行類的{}語句塊,如果有多個{}語句塊,則按照代碼順序依次執(zhí)行
3 {}語句執(zhí)行完成之后,則執(zhí)行構造器方法i = 2
相關文章
解決SpringBoot使用@Value獲取不到yaml中配置值的問題
在最近的開發(fā)中遇到一個問題,使用@Value獲取yml文件中配置的屬性時始終獲取不到值,所以本文給大家詳細介紹了SpringBoot使用@Value獲取不到yaml中值的問題分析及解決方法,需要的朋友可以參考下2024-01-01

