舉例講授Java中final症結字的用法。本站提示廣大學習愛好者:(舉例講授Java中final症結字的用法)文章只能為提供參考,不一定能成為您想要的結果。以下是舉例講授Java中final症結字的用法正文
1. final variable
final variable 就是一個常量,一旦被初始化就弗成以被轉變。
class Test1 { final double PI = 3.14; //常量的稱號最好年夜寫 public Test1(){ PI = 3.14; } void test(){ System.out.println("PI is: " + PI); } public static void main(String[] args){ Test1 t = new Test1(); t.test(); } }
輸入:
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(){ System.out.println("PI is: " + PI); } public static void main(String[] args){ Test1 t = new Test1(); t.test(); } }
輸入:
PI is: 3.14
(2)Uninitialized static final variable
在聲明階段未初始化的 static final variable 只能在靜態代碼塊中被初始化
class Test1 { static final double PI; static { PI = 3.14; } void test(){ System.out.println("PI is: " + PI); } public static void main(String[] args){ Test1 t = new Test1(); t.test(); } }
輸入:
PI is: 3.14
2. final method
final method 不克不及被籠罩。也就是說子類可以挪用父類的 fianl method,然則不克不及籠罩它。
class Test { static final double PI = 3.14; final void test(){ System.out.println("PI is: " + PI); } } class Test1 extends Test{ public static void main(String[] args){ Test1 t = new Test1(); t.test(); } }
輸入:
PI is: 3.14
3. final class
final calss 不克不及被繼續
final class Test1 { static final double PI = 3.14; final void test(){ System.out.println("PI is: " + PI); } public static void main(String[] args){ Test1 t = new Test1(); t.test(); } }
輸入:
PI is: 3.14
PS:java.lang.String類為何設計成 final 的?
起首,先得清晰 final 這個症結字。
final的湧現就是為了為了不想轉變,而不想轉變的來由有兩點:設計或許效力。final 潤飾的類是不被能繼續的,所以 final 潤飾的類是不克不及被改動的。
懂得了這一點,我們再看看成績:
(1)從設計上講,
A、確保它們不會在子類中轉變語義。String類是final類,這意味著不許可任何人界說String的子類。換言之,假如有一個String的援用,它援用的必定是一個String對象,而弗成能是其他類的對象。
B、String 一旦被創立是不克不及被修正的,由於 java 設計者將 String 為可以同享的,上面這段是源碼中的正文:
(2)從效力上講:
A、設計成final,JVM才不消對相干辦法在虛函數表中查詢,而直接定位到String類的相干辦法上,進步了履行效力。
B、Java設計者以為同享帶來的效力更高。
總而言之,就是要包管 java.lang.String 援用援用的對象必定是 java.lang.String的對象,而不是援用它的子孫類,如許能力包管它的效力和平安。