請(qǐng)問關(guān)于 Java static 變量的問題?
問題描述
public class StaticTest { private static String a; private static String b = 'this is ' + a; public static void main(String[] args) {a = 'test';// I think the result is this is test// but the result is this is null, why?System.out.println(b); } // // 我本以為輸出結(jié)果是 this is test // 沒想到輸出結(jié)果為 this is null, 這是什么原因}
問題解答
回答1:首先第一個(gè):你在定義A變量時(shí),就沒有賦初值,所以A為NULL,然后得到B自然就是this is null然后第二個(gè):public static void main,編譯器在編譯這段代碼時(shí)a,b先被main函數(shù)引用,你再更改a,a倒是被更改了,但b還是那個(gè)b,永遠(yuǎn)都是this is null。你需要明白靜態(tài)函數(shù)運(yùn)行的過程的意義。你的B沒有動(dòng)態(tài)被set,當(dāng)然獲得的就算那個(gè)靜態(tài)b,而不會(huì)被動(dòng)態(tài)編譯。
回答2:這是關(guān)于JVM的類初始化機(jī)制吧,字節(jié)碼轉(zhuǎn)為運(yùn)行對(duì)象的三個(gè)過程裝載,連接,初始化。。。其中連接的準(zhǔn)備過程會(huì)給a賦予默認(rèn)值null,因?yàn)?StaticTest 具有main方法,被設(shè)定為 JVM 啟動(dòng)時(shí)的啟動(dòng)類會(huì)執(zhí)行主動(dòng)調(diào)用,進(jìn)行類的初始化,執(zhí)行這兩行代碼 private static String a;private static String b = 'this is ' + a;所以b=this is null
相關(guān)文章:
1. android - NavigationView 的側(cè)滑菜單中如何保存新增項(xiàng)(通過程序添加)2. tp5 不同控制器中的變量調(diào)用問題3. 微信小程序可以用gulp,webpack嗎?4. mysql服務(wù)無法啟動(dòng)1067錯(cuò)誤,誰知道正確的解決方法?5. ueditor上傳服務(wù)器提示后端配置項(xiàng)沒有正常加載,求助!!!!!6. python - 為什么正常輸出中文沒有亂碼,zip函數(shù)之后出現(xiàn)中文編程unicode編碼的問題,我是遍歷輸出的啊。7. 老師 我是一個(gè)沒有學(xué)過php語言的準(zhǔn)畢業(yè)生 我希望您能幫我一下8. 這段代碼既不提示錯(cuò)誤也看不到結(jié)果,請(qǐng)老師明示錯(cuò)在哪里,謝謝!9. php7.3.4中怎么開啟pdo驅(qū)動(dòng)10. 提示語法錯(cuò)誤語法錯(cuò)誤: unexpected ’abstract’ (T_ABSTRACT)
