4

まず第一に、これはJavaのコンストラクターの前にfinal変数を初期化することの正確な複製ではありません。おそらく関係がありますが、私を満足させる答えはありません。

私の問題は、SwingGUIの最終変数に関するものです。特にカスタムについてActionです。私はいくつかのfinal変数といくつかの変数を持っていstatic finalます。

問題は、変数が実際に定数である場合、何が良いかということです。構築時に初期化するか、宣言時に初期化するか。

私が上で述べた質問に対する答えは、一般に、static宣言するときに変数を割り当てることができるとすぐに変数を作成することを指します。変数は静的コンテキストで使用されないため、これは私にはあまり意味がありません。私のフォームがアイコンのように使用する画像がいくつかあります。アプリケーションがそれらを変更しない限り、画像は単に静的なものであるため、それらを静的にしました。それは理にかなっている。

一方、Actionsはカスタム内部クラスの新しいインスタンスです。非常に技術的には静的でもありますが、感じが違うだけです。それらは、静的コンテキストimoで使用可能であってはなりません。だから私は置くのですか:

private final CustomAction customAction = new CustomAction();

または、コンストラクターで初期化しますか?どちらが良いですか?それとも私は間違った考えをしていstaticますか?

4

4 に答える 4

5

フィールドが定数の場合はstatic final、クラスのメンバーにします。

public class Foo{
    public static final int BAR = ...;
}

それ以外の場合は、コンストラクターでフィールドを初期化します。

于 2012-04-10T17:41:46.157 に答える
1

宣言時に定数変数を初期化します。読みやすくなります。クラスのインスタンスごとに異なる値を設定しても意味がない場合、つまり、インスタンスレベルではなくクラスレベルの変数である場合は、静的にします。

于 2012-04-10T17:52:56.300 に答える
1

CustomActionオブジェクトは、コンストラクターでオブジェクトを作成するGUIのインスタンスに本当にカスタムされているように見えるため、静的にしないことで正しい方向に進んでいると思います。コンストラクターで初期化するかどうかはCustomAction、コンストラクターの入力引数に基づいてコンストラクターが別の方法で初期化できるかどうかにかかっていると思います。

非静的との比較が関係する場合static...経験則として、変数が特定のオブジェクトタイプのすべてのインスタンスにわたって一定のままである場合、その変数はである必要がありますstatic。これにより、プログラムの実行時にメモリが節約され、各オブジェクトインスタンスが構築されるときのCPU時間が節約されます。これは、オブジェクトの新しいインスタンスを作成するたびに定数を初期化する必要がないためです。一方、変数がオブジェクトの特定のインスタンスに対して一定のままであるが、インスタンスごとに異なる可能性がある場合は、静的であってはなりません。

最後に(しゃれを意図して)、finalプリミティブ値またはオブジェクトへの参照を変更したくない場合は常に使用する必要があります。静的または非静的コンテキストは、変数が必要かどうかに実際には影響finalfinalません。これは、開発者がその変数を変更したくないためです。その静的コンテキストは、開発者がどのようにアクセスしたいかにのみ依存します。

于 2012-04-10T17:55:59.560 に答える
0

アプリケーションの起動とプログラムの部分を高速化するために、ユーザーがアクセスしない可能性があります([バージョン情報]ダイアログ)。静的は適切ではありません。あなたが知ったように、一般的に静的はあまり好きではありません。いくつかの理由がありますが、非常に説得力のあるものはありません。ただし、アンチパターンまたはその兆候である場合もあります。

それでもあなたの場合、私は静止画像を控えます。ちなみに、リソースは内部にキャッシュされています。

于 2012-04-10T17:53:09.987 に答える