Java高阶语法---final
背景:聽(tīng)說(shuō)final Java高階語(yǔ)法是挺進(jìn)BAT必經(jīng)之路。
?
final:
final關(guān)鍵字顧名思義就是最終不可改變的。
1、含義:final可以聲明成員變量、方法、類(lèi)和本地變量;一旦將引用聲明為final,此引用將不再被改變,編譯器會(huì)檢查代碼,如果試圖將此變量再次初始化則編譯器會(huì)報(bào)告編譯錯(cuò)誤。
2、方法:方法前使用final修飾則代表該方法不可被子類(lèi)的方法重寫(xiě)(private類(lèi)型的方法默認(rèn)是final類(lèi)型的);如果認(rèn)為一個(gè)方法的功能已經(jīng)很perfect了,子類(lèi)中不需要再做改變,大可聲明此方法為final類(lèi)型的,因?yàn)閒inal方法比非final類(lèi)型的方法執(zhí)行速度要快,前者在編譯的時(shí)候已經(jīng)靜態(tài)綁定了,無(wú)需在運(yùn)行時(shí)再動(dòng)態(tài)綁定。
3、類(lèi):使用final修飾的類(lèi)通常功能是perfect的,其不能被繼承。(Java中的final類(lèi),如:Integer、String、Boolean以及其他包裝類(lèi))這種不可改變類(lèi)有很多好處,如:它們的對(duì)象是只讀的,可以在多線程環(huán)境下安全共享,不用額外的同步開(kāi)銷(xiāo)等。
4、優(yōu)勢(shì):final關(guān)鍵字可提高性能,JVM和Java應(yīng)用都會(huì)緩存final變量;final變量可以安全地在多線程環(huán)境下無(wú)需額外同步開(kāi)銷(xiāo)實(shí)現(xiàn)共享;高效,使用final關(guān)鍵字JVM會(huì)對(duì)方法、變量及類(lèi)進(jìn)行優(yōu)化,編譯器在遇到調(diào)用final方法時(shí)會(huì)轉(zhuǎn)入內(nèi)嵌機(jī)制,大幅度提高了方法執(zhí)行效率。
我擼了個(gè)小例子測(cè)試,同樣的代碼final類(lèi)型的方法執(zhí)行用368ms,非final類(lèi)型的方法用了384ms,有圖有據(jù)。
FYI:
1 import lombok.extern.slf4j.Slf4j; 2 3 @Slf4j 4 public class TestFinal { 5 public static void main(String[] args) { 6 TestFinal.commomMethod(); 7 TestFinal.finalMethod(); 8 } 9 public static void commomMethod() { 10 long startTime = System.currentTimeMillis(); 11 int number = 100000000; 12 long amount = 0l; 13 for (int i = 0; i < number; i++) { 14 amount = amount + i; 15 } 16 log.info("commomMethod's amount is: "+amount); 17 long endTime = System.currentTimeMillis(); 18 log.info("commomMethod's amount spend time is: "+(endTime-startTime)+"ms"); 19 } 20 public final static void finalMethod() { 21 long startTime = System.currentTimeMillis(); 22 int number = 100000000; 23 long amount = 0l; 24 for (int i = 0; i < number; i++) { 25 amount = amount + i; 26 } 27 log.info("finalMethod's amount is: "+amount); 28 long endTime = System.currentTimeMillis(); 29 log.info("finalMethod‘s amount spend time is: "+(endTime-startTime)+"ms"); 30 } 31 }執(zhí)行結(jié)果:
- commomMethod's amount is: 4999999950000000
- commomMethod's amount spend time is: 384ms
- finalMethod's amount is: 4999999950000000
- finalMethod‘s amount spend time is: 368ms
?
轉(zhuǎn)載于:https://www.cnblogs.com/taojietaoge/p/10259437.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Java高阶语法---final的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 路由的使用
- 下一篇: t3出行司机待遇(手机游戏热门视频)