最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

舉例講解Java中final關(guān)鍵字的用法

 更新時(shí)間:2016年06月15日 11:21:17   投稿:goldensun  
Java中的final關(guān)鍵字可以被用來(lái)修飾變量、方法和類等,意味著終結(jié)、不可改變,下面我們就來(lái)舉例講解Java中final關(guān)鍵字的用法:

1. final variable

final variable 就是一個(gè)常量,一旦被初始化就不可以被改變。

class Test1 {
 final double PI = 3.14; //常量的名稱最好大寫(xiě)

 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

在聲明時(shí)未初始化的 final variable 被稱作 blank final variable, blank final variable必須在 構(gòu)造函數(shù)中被初始化,否則會(huì)拋出編譯錯(cuò)誤。

class Test1 {
 final double PI;

 Test1(){
 PI = 3.14; //在構(gòu)造函數(shù)中初始化
 }

  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 只能在靜態(tài)代碼塊中被初始化

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 不能被覆蓋。也就是說(shuō)子類可以調(diào)用父類的 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類為什么設(shè)計(jì)成 final 的?
首先,先得清楚 final 這個(gè)關(guān)鍵字。
final的出現(xiàn)就是為了為了不想改變,而不想改變的理由有兩點(diǎn):設(shè)計(jì)或者效率。final 修飾的類是不被能繼承的,所以 final 修飾的類是不能被篡改的。
了解了這一點(diǎn),我們?cè)倏纯磫?wèn)題:
(1)從設(shè)計(jì)上講,
A、確保它們不會(huì)在子類中改變語(yǔ)義。String類是final類,這意味著不允許任何人定義String的子類。換言之,如果有一個(gè)String的引用,它引用的一定是一個(gè)String對(duì)象,而不可能是其他類的對(duì)象。
B、String 一旦被創(chuàng)建是不能被修改的,因?yàn)?java 設(shè)計(jì)者將 String 為可以共享的,下面這段是源碼中的注釋:
(2)從效率上講:
A、設(shè)計(jì)成final,JVM才不用對(duì)相關(guān)方法在虛函數(shù)表中查詢,而直接定位到String類的相關(guān)方法上,提高了執(zhí)行效率。
B、Java設(shè)計(jì)者認(rèn)為共享帶來(lái)的效率更高。
總而言之,就是要保證 java.lang.String 引用引用的對(duì)象一定是 java.lang.String的對(duì)象,而不是引用它的子孫類,這樣才能保證它的效率和安全。

相關(guān)文章

最新評(píng)論

固镇县| 华安县| 泸西县| 宣化县| 临泽县| 微山县| 顺平县| 文昌市| 温宿县| 塔河县| 龙海市| 天峨县| 盈江县| 元朗区| 东港市| 镶黄旗| 神池县| 油尖旺区| 新干县| 衡南县| 丰县| 瓦房店市| 揭西县| 嘉善县| 维西| 定陶县| 保康县| 武强县| 余庆县| 蒙城县| 兴文县| 苏尼特右旗| 晋宁县| 通化市| 炎陵县| 腾冲县| 高清| 横峰县| 玉龙| 阜南县| 禹州市|