注:整理到這部分知識點時候發現有很多問題還沒搞清楚,所以這里可能會存在很多不夠詳細甚至錯誤的理解,准備翻一遍編程思想再來更新,
歡迎評論交流
當JVM執行到這么一句代碼: new Person().setName("superzhao")
它會做這么幾件事
類加載
JVM會用類加載器加載xxx.Person這個class文件
加載(class){
if(class有父類){
加載(superclass);
}
1.靜態域申明,默認初始化為0,false,null
2.按照申明順序(從上而下書寫順序)執行靜態域(賦值)和靜態代碼塊(執行代碼塊體),
二者等價,因此不可在靜態代碼塊中使用位於代碼塊之后申明的靜態域,但是可以初始化
3.按照申明順序加載靜態方法
}
構造器被調用(對象初始化)
1.所有實例域初始化為默認值0,false,null
2.按照申明順序執行域初始化及塊初始化
3.如果構造器"第一行"調用了其他構造器,則執行
4.執行構造器體
調用方法
1.編譯器查看對象的申明類型,找到它所有與方法名相同的方法
2.根據參數類型,找到相應"最合適"的父類方法可能會出現類型轉換(向上轉型)
3.如果是private,static,final,構造器 方法,那么已經確定就是該方法(這四種類型的方法沒有多態特征),
因為沒有多態所以也叫靜態綁定
4.如果是其他方式,采用動態綁定:JVM去尋找改類的實際類型中對應的最合適方法
5.執行調用