中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java之final關鍵字解析

發布時間:2020-08-06 00:21:05 來源:網絡 閱讀:3236 作者:衛莨 欄目:編程語言

Java之final關鍵字解析

final關鍵字可以修飾不同的內容,這些內容僅包括一個變量,一個方法或者一個類,以下是final修飾這些內容的作用:

  • final變量:表示該變量為常量,即只能初始化一次
  • final方法:表示該方法不能被重寫
  • final類:表示該類不可以被繼承

final變量

當一個變量被final關鍵字修飾時,意味著它的值不可以被修改了,也就是說,這個變量表示一個常量。這也意味著final變量必須被初始化。如果一個final變量表示的是一個對象的引用,那么該變量就不能重新表示另一個對象的引用了,但是這個final變量指向的對象的內部狀態是可以改變的,例如,我們可以向一個final array或者final collection中增加或者刪除元素。另外,使用大寫字母和下劃線表示一個final變量是個好習慣。

Examples

// a final variable
final int THRESHOLD = 5;
// a blank final variable
final int THRESHOLD;
// a final static variable PI
static final double PI = 3.141592653589793;
// a  blank final static  variable
static final double PI;

初始化一個final變量

我們必須初始化一個final變量,否則編譯器將會拋出錯誤。一個final變量只能被初始化一次,可以通過初始化器或者初始化語句對其進行初始化。有三種方法可以初始化一個final變量:

  1. 在聲明final變量時就對齊初始化,這是最常用的初始化方式。當一個final變量在聲明的時候沒有被初始化,這個變量就被成為blank final變量,那么下面的兩種方法就是初始化一個blank final變量
  2. blank final變量可以由instance-initializer代碼塊或者構造函數進行初始化。如果有多個構造函數,那么這個blank final變量必須在每一個構造函數中都要進行初始化,否則編譯時報錯。
  3. 一個blank final static變量可以在內部static代碼塊中初始化

Examples

//初始化final變量的方法
class Test {
    //直接初始化
    final int THRESHOLD = 5;
    //blank final變量
    final int CAPACITY;
    final int MAXMUM;
    //blanck static final變量
    static final int MINIMUM;
    //使用初始化器
    {
        CAPATICY = 25;
    }
    //使用static代碼塊
    static {
        MAXMUM = 125;
    }
    //使用構造函數
    public Test() {
        MINIMUM = -1;
    }
}

什么時候需要使用final變量

一個普通變量和一個final變量之間唯一的區別就是一旦給final變量賦值,則該變量的值將不可以再被改變。因此,final變量只能用于我們希望在整個程序執行過程中保持不變的值。

final變量的值是對象的引用

當一個final變量是一個對象的引用,我們把這個變量稱為引用final變量(reference final variable),例如一個StringBuffer的final變量可以是final StringBuffer sb,我們知道一個final變量是不可以再重新賦值的,但是這個final變量指向的對象的內部狀態是可以改變的,這種final屬性可以稱為非傳遞性。

Examples

class Test
{ 
    public static void main(String[] args) 
    { 
        // a final reference variable sb 
        final StringBuilder sb = new StringBuilder("Test"); 
        System.out.println(sb);     
        // changing internal state of object 
        // reference by final reference variable sb 
        sb.append("ForTest"); 
        System.out.println(sb); 
    }    
}
//輸出為:
//Test
//TestForTest

Note

a. final變量不能重新賦值,否則出現編譯錯誤

b. 局部final變量必須在其創建后就對其進行賦值

c. 對比C++的const變量,const變量在聲明的時候就需要賦初值,而final變量可以先聲明再賦值,但只能賦值一次

d. foreach循環中,final修飾變量是合法的,栗子如下

// Java program to demonstrate final 
// with for-each statement 
class Test 
{ 
    public static void main(String[] args) 
    { 
        int arr[] = {1, 2, 3}; 
        // final with for-each statement 
        // legal statement 
        for (final int i : arr) 
            System.out.print(i + " "); 
    }    
} 
//輸出:1 2 3

這里可以這樣使用的原因是每次迭代時相當于重新對i進行了聲明

final類

final類無法被繼承,有兩種使用情況:

  1. 定義一個final類來阻止其他類繼承,因為final類是無法被擴展的,比如所有的封裝類Integer,Float等都是final類
  2. 另一種final類是創建一個不可變類,像預定義的String類,如果不使用final關鍵字我們是無法創建一個不可變類的

final方法

一個被final修飾的方法是無法被重載的,對于一個含有final方法的父類,在其派生類中該方法必須和父類中的方法保持相同的實現

Example

class A 
{
    final void m1() 
    {
        System.out.println("This is a final method.");
    }
}

class B extends A 
{
    void m1()
    { 
        // COMPILE-ERROR! Can't override.
        System.out.println("Illegal");
    }
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乳山市| 珠海市| 淳安县| 乐安县| 鄂托克前旗| 旬阳县| 嵊泗县| 年辖:市辖区| 洱源县| 南皮县| 铅山县| 汨罗市| 新宁县| 赣州市| 济宁市| 明光市| 彭泽县| 芜湖县| 广州市| 莎车县| 依安县| 响水县| 商丘市| 北票市| 太湖县| 喀喇沁旗| 淮北市| 建湖县| 顺平县| 永济市| 阳曲县| 霍城县| 镇原县| 永州市| 大石桥市| 阳城县| 盐亭县| 漳浦县| 那曲县| 莱芜市| 白河县|