final网友讨论
| 網(wǎng)上看到以下內(nèi)容: final方法 將方法聲明為final那有兩個(gè)原因, 第一就是說明 你已經(jīng)知道這個(gè)方法提供的功能已經(jīng)滿足你要求,不需要進(jìn)行擴(kuò)展, 并且也不允許任何從此類繼承的類來覆寫這個(gè)方法,但是繼承仍然可以繼承這個(gè)方法,也就是說可以直接使用。 第二就是允許編譯器將所有對此方法的調(diào)用轉(zhuǎn)化為inline(行內(nèi))調(diào)用的機(jī)制, 它會(huì)使你在調(diào)用final方法時(shí),直接將方法主體插入到調(diào)用處,而不是進(jìn)行例行的方法調(diào)用, 例如保存斷點(diǎn),壓棧等,這樣可能會(huì)使你的程序效率有所提高,然而當(dāng)你的方法主體非常龐大時(shí),或你在多處調(diào)用此方法,那么你的調(diào)用主體代碼便會(huì)迅速膨脹,可能反而會(huì)影響效率, 所以你要慎用final進(jìn)行方法定義。 final類 當(dāng)你將final用于類身上時(shí), 你就需要仔細(xì)考慮,因?yàn)橐粋€(gè)final類是無法被任何人繼承的, 那也就意味著此類在一個(gè)繼承樹中是一個(gè)葉子類,并且此類的設(shè)計(jì)已被認(rèn)為很完美而不需要進(jìn)行修改或擴(kuò)展。 對于final類中的成員,你可以定義其為final,也可以不是final。 而對于方法,由于所屬類為final的關(guān)系,自然也就成了final型的。 你也可以明確的給final類中的方法加上一個(gè)final,但這顯然沒有意義。 我想問的是 ? final類 ? 中的 ? 方法是不是一定是 ? final ? 方法啊??? 如果是 ? final方法的話,執(zhí)行的時(shí)候就和上述的 ? final方法一樣,直接將方法主體插入到調(diào)用處,而不是進(jìn)行例行的方法調(diào)。 ? ? ? ?
? ?
? ? 大前提已經(jīng)是final ? 中間 ? final不final都一樣! ? ? 我的意思是: ? 如果final ? class ? 里面的方法和 ? final ? 方法類似的話, ? ?
? ? ? 樓主:我上面的不是說了嗎:“final方法是否一定會(huì)被轉(zhuǎn)化為“inline”方法,這是編譯器決定的,程序員不需要考慮。” ?
? ? core ? java中指出: ? ? ? Java的參數(shù)按值傳遞的,當(dāng)然不能改變形參變量本身。 ? ? ? 牛人都說完了,我再補(bǔ)充一點(diǎn)哈,final形參的還有一個(gè)用途就是當(dāng)一個(gè)內(nèi)部局部類要調(diào)用形參的話,該形參必須為final,否則編譯錯(cuò)誤。 |
總結(jié)
- 上一篇: 刷新系统托盘(清除死掉的图标)修正版
- 下一篇: HP NIC Teaming技术探讨