首頁  >  文章  >  Java  >  關於Java final的關鍵字你又知道多少

關於Java final的關鍵字你又知道多少

坏嘻嘻
坏嘻嘻原創
2018-09-14 10:35:121410瀏覽

對於初學者來說,要執行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