Java高阶语法---final
背景:聽說final Java高階語法是挺進BAT必經之路。
?
final:
final關鍵字顧名思義就是最終不可改變的。
1、含義:final可以聲明成員變量、方法、類和本地變量;一旦將引用聲明為final,此引用將不再被改變,編譯器會檢查代碼,如果試圖將此變量再次初始化則編譯器會報告編譯錯誤。
2、方法:方法前使用final修飾則代表該方法不可被子類的方法重寫(private類型的方法默認是final類型的);如果認為一個方法的功能已經很perfect了,子類中不需要再做改變,大可聲明此方法為final類型的,因為final方法比非final類型的方法執行速度要快,前者在編譯的時候已經靜態綁定了,無需在運行時再動態綁定。
3、類:使用final修飾的類通常功能是perfect的,其不能被繼承。(Java中的final類,如:Integer、String、Boolean以及其他包裝類)這種不可改變類有很多好處,如:它們的對象是只讀的,可以在多線程環境下安全共享,不用額外的同步開銷等。
4、優勢:final關鍵字可提高性能,JVM和Java應用都會緩存final變量;final變量可以安全地在多線程環境下無需額外同步開銷實現共享;高效,使用final關鍵字JVM會對方法、變量及類進行優化,編譯器在遇到調用final方法時會轉入內嵌機制,大幅度提高了方法執行效率。
我擼了個小例子測試,同樣的代碼final類型的方法執行用368ms,非final類型的方法用了384ms,有圖有據。
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 }執行結果:
- commomMethod's amount is: 4999999950000000
- commomMethod's amount spend time is: 384ms
- finalMethod's amount is: 4999999950000000
- finalMethod‘s amount spend time is: 368ms
?
轉載于:https://www.cnblogs.com/taojietaoge/p/10259437.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java高阶语法---final的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路由的使用
- 下一篇: Java数组、集合的三种遍历方式(包懂)