1.什么是非虛方法
? ? ? ? 定義:? 在類加載的時候會把符號引用解析為該方法直接引用的方法稱為非虛方法;
我是導(dǎo)演,我有一部春工大鬧要拍, 這個戲的主角(類)我想請寶強(qiáng)
2. 理解一下,類加載(把寶強(qiáng)請到劇組)
==== 類的生命周期begin=====
【1.加載 --- 請寶強(qiáng)劇組報(bào)到 - 不管你寶強(qiáng)從哪里來】
? ? ? ? 典型的 從*.java --編譯-> *.class ----加載--> 到內(nèi)存對象(字節(jié)流)
? ? ? --- 虛擬機(jī)二進(jìn)制流沒有規(guī)定必須從Class文件獲取, 只要符合類文件格式 ,從war,jar,網(wǎng)絡(luò)中,數(shù)據(jù)庫中,計(jì)算生成,jsp生成都可以
【2.驗(yàn)證 -- 驗(yàn)明真身】檢查這個字節(jié)流是不是符合要求
【3.準(zhǔn)備 -- 定好造型,書生就戴眼鏡,海盜就戳一只眼】類變量初始值階段
【4.解析 --? 道具準(zhǔn)備好,人員確定好的都登記好】將常量池內(nèi)的符號引用替換為直接引用的過程
【5.初始化 --- 根據(jù)各場景,具體確定演員,戲份】 實(shí)例化類 , 比如 new 類構(gòu)造器
【6.使用 --- 開演】? 各種裝B
【7.卸載 --- 結(jié)束拍攝】 垃圾回收? 狗帶
======生命周期end=============
3. 那什么是符號引用與直接引用呢
? ? ? 寶強(qiáng)來到劇組,一看有一場對手戲, 就問導(dǎo)演,對戲的是哪個
? ? ? 導(dǎo)演說, 是馬大容,? 寶強(qiáng) 對戲馬大容(內(nèi)存里就是對象的指針) 就是直接引用 ;
? ? ? 要是導(dǎo)演說, 剛到劇組沒確定,要到定好場景時才能知道
? ? ? ? 寶強(qiáng)只能記對戲女主#1 , 這樣就符號引用,寶強(qiáng)的心里#1就是一個符號
? ? ? 同理, 加載時, class文件里不能確定的, 給他個符號 比如#1 ,表示某個方法
? ? ? ? ? ? ? ? 要是能確定的直接調(diào)用指針
? ? 符號引用的好處就是 根據(jù)不同的場景替換不同的女主, 不必一開始就定死,靈活
4. 到底哪些是非虛方法
? ? ? ? java語言符合 "編譯期可知,運(yùn)行期不可變" 這個要求的方法
? ? ? ? 例如 :? ?
? ? ? ? ? ? ? ? 1. 靜態(tài)方法?
? ? ? ? ? ? ? ? 2. 私有方法
? ? ? ? ? ? ? ? 3.? 實(shí)例構(gòu)造器
? ? ? ? ? ? ? 4. 父類方法
? ? ? ? ? ? ? 5. final方法
? ? ? ? ?
?
? ?