不多bb,先上結論:
1、乙個類會被類載入去預載入,被載入的類,不一定被初始化。
2、類只有在首次被使用的時候,才會被初始化,也就是類只會被初始化一次。
下面是六道題目,思考一下輸出結果應該是什麼?
結果是:
myparent1 static block
hello world
分析:在這裡mychild1和myparent1都是被載入了,但是只有myparent1被初始化了。因為沒有使用mychild1,所以它不會被初始化。
q2,對上邊q1的修改
結果是:
myparent1 static block
mychild1 static block
welcome
分析:初始化子類的時候,一定會初始化其父類,這次是兩個類都被初始化了。
值得注意的是,只有類之間的繼承才是這樣,介面間的繼承在子介面初始化的時候,不會對其父類介面進行初始化。
結果是:
hello world
分析:因為str是被常量修飾的,在編譯階段常量str會被放到mytest2的常量池中,跟myparent2也就沒關係了。
不管是其他常量int,float等等常量,都是一樣的。
q4,對上邊q3的修改
結果是:
myparent3 static code
uuid生成的id
分析:編譯期間常量不會被確定,自然不會放到常量池中,會導致myparent3的初始化。
q5
結果是:
myparent4 static block
分析:例項化物件的時候肯定會被初始化,而且只會初始化一次。
q6,對q5的修改
結果是:
沒有輸出
分析:陣列型別是由jvm在執行期動態生成的,不會被初始化。
關於10月20日 8的六道題的心得與感悟
二十號了,複賽在即,還望努力.第一題 腦筋急轉彎一樣的神奇水題.有乙個a b的矩形桌子,和若干個半徑為r的圓盤,兩人輪流把圓盤放到桌子上,不能有重疊的部分.最後無法放圓盤的人就是輸家.最後輸出贏家.一開始思來想去,完全沒有思路.最後看題解才發現是一道大水題.放盤子的時候,只有兩種情況.1.盤子可以放...
關於類的靜態載入順序
關於類中靜態變數和靜態方法以及構造方法之類的載入順序問題現在成了面試中的基本問題,今天閒來無事,就寫一篇部落格來記述一下。package com.cn.bb public class testparentstatic private static string staticfield 父類靜態變數 ...
一道關於載入順序的題目分析
package com.gt.world.oa.aaa author gt public class test20140331 static public test20140331 string str private static int print string str public stati...