Java中final關鍵字用法的講解
1. final variable
final variable 就是一個常量,一旦被初始化就不可以被改變。
class Test1 { final double PI = 3.14; //常量的名稱最好大寫 public Test1(){ PI = 3.14; } void test(){ tln("PI is: " + PI); } public static void main(String[] args){ Test1 t = new Test1(); (); }}
輸出:
PI is: 3.14
(1)Blank final variable
在聲明時未初始化的 final variable 被稱作 blank final variable, blank final variable必須在 構造函數中被初始化,否則會拋出編譯錯誤。
class Test1 { final double PI; Test1(){ PI = 3.14; //在構造函數中初始化 } void test(){ tln("PI is: " + PI); } public static void main(String[] args){ Test1 t = new Test1(); (); }}
輸出:
PI is: 3.14
(2)Uninitialized static final variable
在聲明階段未初始化的 static final variable 只能在靜態代碼塊中被初始化
class Test1 { static final double PI; static { PI = 3.14; } void test(){ tln("PI is: " + PI); } public static void main(String[] args){ Test1 t = new Test1(); (); }}
輸出:
PI is: 3.14
2. final method
final method 不能被覆蓋。也就是説子類可以調用父類的 fianl method,但是不能覆蓋它。
class Test { static final double PI = 3.14; final void test(){ tln("PI is: " + PI); }}class Test1 extends Test{ public static void main(String[] args){ Test1 t = new Test1(); (); }}
輸出:
PI is: 3.14
3. final class
final calss 不能被繼承
final class Test1 { static final double PI = 3.14; final void test(){ tln("PI is: " + PI); } public static void main(String[] args){ Test1 t = new Test1(); (); }}
輸出:
PI is: 3.14
PS:ng類為什麼設計成 final 的?
首先,先得清楚 final 這個關鍵字。
final的出現就是為了為了不想改變,而不想改變的理由有兩點:設計或者效率。final 修飾的類是不被能繼承的,所以 final 修飾的類是不能被篡改的。
瞭解了這一點,我們再看看問題:
(1)從設計上講,
A、確保它們不會在子類中改變語義。String類是final類,這意味着不允許任何人定義String的子類。換言之,如果有一個String的引用,它引用的一定是一個String對象,而不可能是其他類的對象。
B、String 一旦被創建是不能被修改的.,因為 java 設計者將 String 為可以共享的,下面這段是源碼中的註釋:
(2)從效率上講:
A、設計成final,JVM才不用對相關方法在虛函數表中查詢,而直接定位到String類的相關方法上,提高了執行效率。
B、Java設計者認為共享帶來的效率更高。
總而言之,就是要保證 ng 引用引用的對象一定是 ng的對象,而不是引用它的子孫類,這樣才能保證它的效率和安全。
-
Java中如何獲取Spring中配置的bean
Spring是一個分層的JavaSE/EEfull-stack(一站式)輕量級開源框架。在Java中如何獲取Spring中配置的'bean?下面本站小編帶大家一起來看看詳細操作,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!一、什麼是Spring?Spring是一個輕量級的控...
-
全國計算機等級《二級JAVA》命題預測試卷
以下是本站小編帶來的全國計算機等級《二級JAVA》命題預測試卷,歡迎學習!更多內容請關注應屆畢業生考試網!1、軟件生命週期是指()。A.軟件產品從提出、實現、使用維護到停止使用退役的過程B.軟件從需求分析、設計、實現到測試完成的過程,C.軟件的開發過程D.軟件...
-
Java語法基礎for語句練習
本文是本站小編搜索整理的關於Java語法基礎for語句練習,供參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!控制語句——for練習語句的嵌套應用累加求和,計數器循環嵌套一、語句的嵌套應用語句嵌套形式。其實就是語句中...
-
計算機二級JAVA考試構建JAVA程序2017
很多人一見到説要編程就以為很難,其實只有一點一滴學知識點也不難,下面是小編整理的計算機二級JAVA考試構建JAVA程序介紹,歡迎閲讀!第一個javaapplicationjava程序分為javaapplication(java應用程序)和javaapplet(java小應用程序)兩種。下面讓我們編寫一個java應...