首頁 Java java教程 Java語言深入 final在java中的應用

Java語言深入 final在java中的應用

Dec 17, 2016 am 11:26 AM

 final在java中並不常用,然而它卻為我們提供了諸如在C語言中定義常量的功能,不僅如此,final還可以讓你控制你的成員、方法或者是一個類別是否可被覆寫或繼續等功能,這些特點使final在Java中擁有了一個不可或缺的地位,也是學習Java時必須要知道和掌握的要害字之一。
final成員
  當你在類別中定義變數時,在其前面加上final要害字,那便是說,這個變數一旦被初始化便不可改變,這裡不可改變的意思對基本型別來說是其值不可變,而對於物件變數來說其引用不可再變。其初始化可以在兩個地方,一是其定義處,也就是說在final變數定義時直接給其賦值,二是在建構函式中。這兩個地方只能選其一,要麼在定義時給值,要麼在構造函數中給值,不能同時既在定義時給了值,又在構造函數中給另外的值。以下這段程式碼示範了這一點:
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
public class Bat{   給址值
    final int i;            //因為要在建構函式中初始化,因此此處可不可再給予值🎠     Bat(){
        i=100 ;
        list=new LinkedList();
    }
    Bat(int ii,List l){ 
    }
    public static void main(String[] args){
        Bat b=new Bat();
        b.list.add(new Bat());
        //b.i=25;
    System.out.PRintln("I="+b. i+" List Type:"+b.list.getClass());
        b=new Bat(23,new ArrayList());
    out.println( "I="+b.i+" List Type:"+b.list.getClass());
    }
}
  此程式很簡單的示範了final的常規用法。在這裡使用在建構函數中進行初始化的方法,這使你有了一點靈活性。如Bat的兩個重載建構函式所示,第一個缺省建構函式會為你提供預設的值,重載的那個建構函式會根據你所提供的值或型別來為final變數初始化。然而有時你並不需要這種彈性,你只需要在定義時便給定其值並永不變化,這時就不要再用這種方法。在main方法中有兩行語句註解掉了,假如你去掉註釋,程式便無法通過編譯,這便是說,不論是i的值或是 list的類型,一旦初始化,確實無法再更改。然而b可以透過重新初始化來指定i的值或list的類型,輸出結果中顯示了這一點:
I=100 List Type:class java.util.LinkedList
I=23 List Type:class java.util.ArrayList
  還有一種用法是定義方法中的參數為final,對於基本類型的變量,這樣做並沒有什麼實際意義,因為基本類型的變量在調用方法時是傳值的,也就是說你可以在方法中更改這個參數變數而不會影響到呼叫語句,然而對於物件變量,卻顯得很實用,因為物件變數在傳遞時是傳遞其引用,這樣你在方法中對物件變數的修改也會影響到呼叫語句中的物件變量,當你在方法中不需要改變作為參數的物件變數時,明確使用final進行聲明,會防止你無意的修改而影響到呼叫方法。
另外方法中的內部類別在使用方法中的參變項時,此參變也必須宣告為final才可使用,如下程式碼所示:
public class INClass{
   void innerClass(final String str){ IClass{
            IClass(){
              }
        }
        IClass ic=new IClass();
    }
 new INClass();
      inc.innerClass("Hello");
  }
}
final方法
  將方法聲明為final,那就說明你已經知道這個方法提供的功能已經滿足你要求,不需要進行擴展,並且也不答應任何從此類繼續的類來覆蓋這個方法,但是繼續仍然可以繼續這個方法,也就是說可以直接使用。另外有一種被稱為inline的機制,它會使你在調用final方法時,直接將方法主體插入到調用處,而不是進行例行的方法調用,例如保存斷點,壓棧等,這樣可能會讓你的程式效率有所提高,然而當你的方法主體非常龐大時,或你在多處調用此方法,那麼你的調用主體代碼便會迅速膨脹,可能反而會影響效率,所以你要慎用final進行方法定義。
final類
  當你將final用於類身上時,你就需要仔細考慮,因為一個final類是無法被任何人繼續的,那也就意味著此類在一個繼續樹中是一個葉子類,並且此類的設計已被認為很完美而不需要進行修改或擴展。對於final類別中的成員,你可以定義其為final,也可以不是final。而對於方法,由於所屬類為final的關係,自然也就成了 final型的。你也可以明確的給final類別中的方法加上一個final,但這顯然沒有意義。
  以下的程式示範了final方法和final類別的用法:
final class final{
    final String str="final Data print(){
        System .out.println("final method.");
    }
    public void what(){
        inalDemo {   //extends final 無法繼續 
    public static void main(String[] args){
        final f=new final();  );
    }
}
  從程式中可以看出,final類與普通類別的使用幾乎沒有差別,只是它失去了被繼續的特性。 final方法與非final方法的差異也很難從程式行看出,只是記得慎用。
final在設計模式中的應用
  在設計模式中有一種模式叫做不變模式,在Java中透過final要害字可以很輕易的實現這個模式,在講解final成員時用到的程式Bat.java就是一個不變模式的例子。假如你對此感愛好,可以參考閻宏博士所寫的《Java與模式》一書中的講解。
  到此為止,this,static,super和final的使用已經說完了,假如你對這四個要害字已經能夠大致說出它們的區別與用法,那便說明你基本上已經把握。然而,世界上的任何東西都不是完美無缺的,Java提供這四個要害字,給程式設計師的程式設計帶來了很大的便利,但並不是說要讓你到處使用,一旦達到濫用的程序,便適得其反,所以在使用時請一定要認真考慮。  

 以上就是Java語言深入 final在java中的應用的內容,更多相關文章請關注PHP中文網(www.php.cn)! 



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能 PHP與Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

如何在Spring Tool Suite中運行第一個春季啟動應用程序? 如何在Spring Tool Suite中運行第一個春季啟動應用程序? Feb 07, 2025 pm 12:11 PM

Spring Boot簡化了可靠,可擴展和生產就緒的Java應用的創建,從而徹底改變了Java開發。 它的“慣例慣例”方法(春季生態系統固有的慣例),最小化手動設置

See all articles