簡體   English   中英

最終變量與靜態最終變量之間的差異

[英]Difference between final variables vs static final variables

我只是在研究最終數據成員,我認為最終變量與靜態最終變量的區別是什么?


我知道靜態和final字段都只有一個存儲空間,而final變量將具有與每個實例相關聯的存儲空間。

但是,即使我只聲明一個final變量,對於所有對象,它仍然是相同的,因為我需要在程序本身而不是在運行時對其進行初始化。


因此,除了與內存有關的問題外,兩者之間基本上沒有區別。

但是,即使我只聲明一個final變量,對於所有對象,它仍然是相同的,因為我需要在程序本身而不是在運行時對其進行初始化。

不可以,非靜態最終成員可以在構造函數中初始化。 之后便無法重新分配它們。

final意味着您只能將值賦給變量一次。 final可以在許多范圍內使用,並且非常有用,在對象屬性中,您必須(並強制)在聲明,對象的構造函數或初始化塊中設置值。

static是設置變量的范圍,這意味着在類屬性中,值存儲在類內部,並且即使沒有對象也可以訪問,當您使用static finalfinal static您必須(強制)執行以下操作:在聲明上或類的靜態初始化代碼內設置值。

例:

public class NewClass {

    static final int sc = 123; //I recommend to use this declaration style.
    final static int scc;
    final int o = 123;
    final int oo;
    final int ooo;

    static {
        scc = 123;
    }

    {
        oo = 123;
    }

    public NewClass() {
        ooo = 123;
    }

    void method(final int p) {
//        p=123; //Error, the value is only assigned at the call of the method.

        final int m = 123;
        final int mm;
        mm = 123;
//        mm = 456; //Error, you can set the value only once.
        new Thread(new Runnable() {

            @Override
            public void run() {
                System.out.println(m + p); //You still can reach the variables.
            }
        }).start();
    }
}

final變量:聲明為final的變量將是一個常量,其值不能更改,並且可以在構造函數中初始化。

靜態最終變量:必須在聲明過程中或在靜態初始化程序塊中將其初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM