12

最終データメンバーについて勉強していたところ、最終変数と静的最終変数の違いは何だと思いましたか??


static と final の両方であるフィールドにはストレージが 1 つしかなく、final 変数にはすべてのインスタンスに関連付けられたストレージがあることを理解しています。

ただし、変数のみを最終的に宣言しても、実行時ではなくプログラム自体で初期化する必要があるため、すべてのオブジェクトで同じままです。


したがって、メモリ関連の問題を除いて、基本的に2つの違いはありません??

4

3 に答える 3

14

ただし、変数のみを最終的に宣言しても、実行時ではなくプログラム自体で初期化する必要があるため、すべてのオブジェクトで同じままです。

いいえ、静的でない最終メンバーはコンストラクターで初期化できます。その後、再割り当てすることはできません。

于 2012-06-01T04:08:49.813 に答える
3

これfinalは、変数に一度だけ値を代入できることを意味します。はfinal多くのスコープで使用でき、非常に便利です。オブジェクト プロパティでは、宣言、コンストラクタ、またはオブジェクトの初期化ブロックで値を設定する必要があります (強制されます)。

そして、static変数のスコープを設定することです。つまり、クラスプロパティでは、値がクラス内のストレージであり、オブジェクトがなくてもアクセスできることを意味しstatic finalますfinal 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();
    }
}
于 2012-06-01T04:23:59.057 に答える
2

final 変数 : final と宣言された変数は定数になり、その値は変更できず、コンストラクターで初期化できます。

static final variable : これは、宣言中または静的初期化ブロックで初期化する必要があります。

于 2012-06-01T04:19:39.630 に答える