Javaの静的列挙型と非静的列挙型の違いは何ですか?両方の使用法は同じです。
それは正しいですか すべての静的なものは起動時にメモリにロードされ、非静的なものはオンデマンドでロードされます? はいの場合、どの方法がより良いですか?一部のデータを常にメモリに保持するか、サーバーリソースを使用してそれらを毎回ロードしますか?
public class Test {
public enum Enum1 {
A, B
}
public static enum Enum2 {
C, D
}
public static void main(String[] args) {
Enum1 a = Enum1.A;
Enum1 b = Enum1.B;
Enum2 c = Enum2.C;
Enum2 d = Enum2.D;
}
}
すべてのenum
sは実質的にstatic
です。ネストされた列挙型がある場合、static class
とほぼ同じです。
すべてのクラスは遅延ロード(enumsまたはそれ以外)されますが、ロードされると、それらは一度にロードされます。つまり、いくつかの定数をロードすることはできませんが、他の定数はロードできません(クラス初期化の途中を除く)
Javaでは、特定の修飾子を暗黙的に許可して、常に宣言する必要を回避しています。つまり、修飾子を追加しても、同じことをより長い方法で記述する以外に何もする必要はありません。
のデフォルト修飾子
クラスフィールド/メソッド/ネストクラス-パッケージローカル、非ファイナル、非スタティック
列挙型およびネストされた列挙型-ローカル、最終、静的なパッケージ
インターフェイスフィールド-public static final
インターフェイスメソッド-public abstract
インターフェースのネストされたクラス-public static
、非最終
注:static
はenum
のオプションですが、常に静的です。ただし、常に概念的にfinal
であるにもかかわらず、final
を列挙型に設定することはできません(技術的には、定数のオーバーライドされた実装を持つサブクラスを持つことができます)
編集:static
でenum
を使用する必要があるのは、enumの値のimport static
のみです。ありがとう@ man910
ネストされた列挙型の場合、デフォルトでは暗黙的にstatic
です。
Java言語仕様 によると:
ネストされた列挙型は暗黙的に静的です。ネストされた列挙型を静的であると明示的に宣言することは許可されています。
すべてのEnumは暗黙的に静的であり、static
キーワードを記述する必要はありません。すべてのインターフェイスメソッドが暗黙的にパブリックである方法と同様に。
enums
はinherently static
であるため、enums
でstatic-keyword
を使用する場合、必要はなく、違いもありません。
列挙型がクラスのメンバーである場合、暗黙的に静的です。
インターフェイスには、メンバー型の宣言を含めることができます。インターフェイスのメンバー型宣言は、暗黙的に静的でパブリックです。