詳解Java中final的用法_java

來源:互聯網
上載者:User

概念

final 具有“不可改變的”的含義,可以修飾 非抽象類別、非抽象成員方法和變數。

  • 用 final 修飾的類不能被繼承,沒有子類。
  • 用 final 修飾的方法不能被子類的方法覆蓋(重寫)。
  • 用 final 修飾的變數表示常量,只能被賦一次值(聲明變數的時候)。

註:

final 不能用來修飾構造方法,因為“方法覆蓋”這一概念僅適用於類的成員方法,而不適用於類的構造方法,父類的構造方法和子類的構造方法之間不存在覆蓋的關係,因此用final修飾構造方法沒有任何意義。

父類中用 private 修飾的方法不能被子類的方法所覆蓋,因此可以理解為 private 類型的方法預設是 final 類型的。

final 類

把類定義為 final,使這個類不能被繼承。具體使用情境如下:

  • 不是專門為繼承而設計的類,類本身的方法之間有複雜的調用關係。如果隨意建立這些類的子類,子類有可能會錯誤的修改了父類的實現細節。
  • 處於安全的原因,類的實現細節不允許在被擴充。
  • 在建立物件模型時,確信這個類不會再被擴充。

例如:JDK中的java.lang.String 類被定義為 final 類型。

public final class String{...}

final 方法

在某些情況下,出於安全原因,父類不允許子類覆蓋某個方法,此時可以把這個方法聲明為 final 類型。

例如:JDK中的java.lang.Object 類中,getClass()方法為 final 類型,而 equals() 方法不為 final 類型。

所有 Object 的子類都可以覆蓋 equals() 方法,但不能覆蓋 getClass() 方法。

final 變數

用 final 修飾的變數表示取值不會改變的常量。

例如:JDK中 java.lang.Integer 類中定義了兩個常量。

public static final int   MIN_VALUE = 0x80000000;

public static final int   MAX_VALUE = 0x7fffffff;

final 變數具有以下特徵:

  • final修飾符可以修飾靜態變數、成員變數和局部變數,分別表示靜態常量、執行個體常量和局部常量。
 public class Demo{  public static final int MAX_VALUE = 23;  //靜態常量  public static final int MIN_VALUE = 10;  //靜態常量  private final Date birthday = new Date(); //成員常量 }

靜態常量一般以大寫字母命名,單詞之間以“_”符號分開。

  • final修飾的成員變數必須初始化。
 public class FinalTest {   final int a = 1;  //成員常量 預設初始化   static final int b = 2;  //靜態常量 預設初始化   final int c;  //成員常量   static final int d;  //靜態常量      public FinalTest(){     c = 3;  //成員常量 未預設初始化,可在建構函式中初始化   }      static {     d = 4;  //靜態常量 未預設初始化,可在靜態代碼塊中初始化   } }

final 變數只能賦一次值,如果將參考型別的變數用 final 修飾,該變數只能始終引用一個對象,但可以改變對象的內容。

 public class FinalTest {   String str = "";   public void print(){     System.out.println(str);   }     public static void main(String[] args){     final FinalTest finalTest = new FinalTest();     finalTest.str = "xixihaha";     finalTest.print();   } }

總結:

實際程式中,通過 final 修飾符來定義常量,目的為:

  • 提高程式的安全性。
  • 提高代碼可維護性。
  • 提供代碼可讀性。

 以上就是本文的全部內容,希望對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.