国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

舉例講解Java中final關鍵字的用法

2019-11-26 14:11:22
字體:
來源:轉載
供稿:網友

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的對象,而不是引用它的子孫類,這樣才能保證它的效率和安全。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 额尔古纳市| 望谟县| 怀仁县| 克拉玛依市| 平舆县| 宽甸| 衡阳县| 枞阳县| 乌拉特后旗| 芒康县| 鄂伦春自治旗| 九台市| 东方市| 镇坪县| 湘潭县| 台山市| 浦城县| 永康市| 达拉特旗| 慈溪市| 河西区| 壤塘县| 扎兰屯市| 金塔县| 无为县| 平塘县| 呼玛县| 武功县| 黑山县| 漯河市| 抚松县| 大港区| 贵阳市| 寻乌县| 加查县| 安吉县| 和平县| 铜川市| 皋兰县| 阿克苏市| 嘉祥县|