欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

java語言

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

時(shí)間:2025-03-02 23:13:25 java語言 我要投稿
  • 相關(guān)推薦

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

  1. final variable

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

  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

  在聲明時(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 不能被覆蓋。也就是說子類可以調(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è)倏纯磫栴}:

 。1)從設(shè)計(jì)上講,

  A、確保它們不會(huì)在子類中改變語義。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)為共享帶來的效率更高。

  總而言之,就是要保證 java.lang.String 引用引用的對(duì)象一定是 java.lang.String的對(duì)象,而不是引用它的子孫類,這樣才能保證它的效率和安全。

【Java中final關(guān)鍵字用法的講解】相關(guān)文章:

PHP中final關(guān)鍵字用法08-14

Java中synchronized關(guān)鍵字的用法07-23

Java中Finally關(guān)鍵字06-30

理解java中的關(guān)鍵字06-22

java之this關(guān)鍵字用法事例解析10-11

解析Java中volatile關(guān)鍵字09-28

講述java中enum的用法10-14

Java final 修飾符11-06