搜尋
首頁Javajava教程關於Java final的關鍵字你又知道多少

對於初學者來說,要執行JSP和Servlet,Tomcat是一個很不錯的選擇。你也可以用Resin,這兩個產品都是可以不花一分錢的。 Resin對Xml的支持是很好的。

1.         修飾基礎資料成員的final

這是final的主要用途,其意義相當於C/C 的const,即該成員被修飾為常數,表示不可修改。如java.lang.Math類別的PI和E是final成員,其值為3.141592653589793和2.718281828459045。

2.         修飾類別或物件的引用的final

在Java中,我們無法讓物件被修飾為final,而只能修飾物件的引用,這表示即使您寫public final A a = new A(); 事實上a指向的物件的資料仍然可以被修改,不能修改的是a本身的引用值,也就是你不能再對a進行重賦值。同樣的情況出現在數組中,例如public final int[] a = {1, 2, 3, 4, 5},事實上a中的數值是可修改的,即可以寫a[0] = 3。據目前了解,java中數組內的資料是無法修飾為不可修改的,而C/C 可以。

3.         修飾方法的final

修飾方法的final和C/C 中修飾成員物件的const大不相同。首先,修飾方法的final含義不是“不可修改”,而是指該方法不可被繼承成員重新定義。 (注意,這裡所說的不能被重新定義,並不是指子類別一定不能定義同名方法,如果父類別的方法是私有類型,子類別是允許定義該方法的,這裡指的不能重新定義是指不能透過改寫方法來使得方法重寫的多態性得以實現,如不希望A a = new B(); a.f();這樣的重寫方法情況出現)

範例:

public class A {
    // final方法f
    public final void f() {
       System.out.println("类A中的final方法f被调用了");
    }
}
public class B extends A {
    // 编译错误!父类的f方法是final类型,不可重写!
    //! public void f() {
    //!     System.out.println("类B中的方法f被调用了");
    //! }
}

此外,當一個方法被修飾為final方法時,意味著編譯器可能將該方法用內聯(inline)方式載入,所謂內聯方式,是指編譯器不用像平常調用函數那樣的方式來呼叫方法,而是直接將方法內的程式碼經由一定的修改後copy到原程式碼中(將方法主體直接插入到呼叫處,而不是進行方法呼叫)。這樣可以讓程式碼執行的更快(因為省略了呼叫函數的開銷),例如在int[] arr = new int[3]呼叫arr.length()等。

另一方面,私有方法也被編譯器隱式修飾為final,這表示private final void f()和private void f()並無差別。

4.         修飾類別的final

當一個類別被修飾為final時,它的意義很明確,就是不允許該類別被繼承,也就是說,該類別「絕後」了,任何繼承它的操作都會以編譯錯誤告終。這也凸顯出Java用final而不用const作為識別符的理由。 (成員變數可以不是final,成員方法直接是final的)

      範例:

       public final class A {
}
// 编译错误!A是final类型,不可被继承!
//!public class B extends A{
//!}

5.              修飾。以為物件變數傳遞的是其引用,為防止呼叫過程中無意的變更而修飾。

相關推薦:

JAVA/JSP學習系列之三_php基礎

JAVA/JSP學習系列之一_php基礎

 

以上是關於Java final的關鍵字你又知道多少的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何處理在IDEA中連接Oracle數據庫時出現的數字溢出錯誤?如何處理在IDEA中連接Oracle數據庫時出現的數字溢出錯誤?Apr 19, 2025 pm 04:15 PM

在IDEA中連接Oracle數據庫時出現數字溢出錯誤的處理方法當我們在使用IntelliJ...

@ResultType註解在MyBatis中如何正確使用?@ResultType註解在MyBatis中如何正確使用?Apr 19, 2025 pm 04:12 PM

在研究MyBatis框架時,開發者們常常會遇到關於註解的各種問題,其中一個常見的問題是如何正確使用@ResultType注...

如何利用自然語言處理技術高效查詢人員數據?如何利用自然語言處理技術高效查詢人員數據?Apr 19, 2025 pm 04:09 PM

利用自然語言處理技術查詢人員數據的方法在現代企業中,人員數據的管理和查詢是一個常見的需求。假設我們...

SpringBoot多數據源配置下,數據庫訪問白天慢夜間快是什麼原因?SpringBoot多數據源配置下,數據庫訪問白天慢夜間快是什麼原因?Apr 19, 2025 pm 04:06 PM

Springboot項目多數據源配置下的數據庫訪問性能問題排查本文針對一個Springboot項目中使用Atomikos進行多數據源配�...

Java項目打包成JAR後出現NoClassDefFoundError: 如何排查JDK版本兼容性問題?Java項目打包成JAR後出現NoClassDefFoundError: 如何排查JDK版本兼容性問題?Apr 19, 2025 pm 04:03 PM

Java項目打包成可執行JAR文件時遭遇NoClassDefFoundError難題很多Java開發者在將項目打包成可執行JAR文件時,可能會�...

如何分析IntelliJ IDEA的破解過程並找到負責註冊的lib或class?如何分析IntelliJ IDEA的破解過程並找到負責註冊的lib或class?Apr 19, 2025 pm 04:00 PM

關於IntelliJIDEA破解的分析方法在編程界,IntelliJ...

如何使用Java和JavaCV提升視頻質量?為什麼效果有限?如何使用Java和JavaCV提升視頻質量?為什麼效果有限?Apr 19, 2025 pm 03:57 PM

問題介紹:視頻質量提升是視頻處理中的一個重要環節,尤其是在處理低清晰度的視頻時,如何利用Java語言和�...

如何讓SpringBoot中的@RequestBody註解正確接收非JSON格式的字符串參數?如何讓SpringBoot中的@RequestBody註解正確接收非JSON格式的字符串參數?Apr 19, 2025 pm 03:54 PM

在處理SpringBoot應用中,我們經常會遇到如何正確接收請求參數的問題。特別是當參數格式不是常見的JSON時,更�...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具