オブジェクトを静的として宣言する利点はありますか?
そうではありません。
確かに、パフォーマンス上の利点はありません。これは、静的が実際にはヒープ内に存在する (非表示の) 静的フレーム オブジェクトに格納されるためです。最終的に、JIT は、静的変数をフェッチするためのネイティブ コードを生成しますが、これはオブジェクト変数のフェッチよりも高速ではありません。
static を使用して、アプリケーション内で「グローバルに」データ構造を共有する方が便利であると主張することができます。しかし、その便利さにはいくつかの重大な欠点があります。最大の問題は、静的によってテストが難しくなり、コードの再利用が難しくなることです。
ただし、一般的なケースと、 static が不変の値またはデータ構造を保持または参照する特定のケースとを混同しないでください。たとえば、文字列定数または定数マッピングのように。これらは、設計と実際の両方の理由で正当化できます。例えば
public static final String THE_ANSWER = "Forty two";
private static final Map<String, Integer> SCORES;
static {
Map<String, Integer> map = new HashMap<>();
tmp.put("perfect", 100);
tmp.put("average", 50);
tmp.put("fail", 20);
SCORE = Collections.unmodifiableMap(map);
}
これは問題ありません...異なる(現在または将来の)ユースケースが異なる値/マッピング/その他を必要とする可能性がない限り。その可能性がある場合、static
有害である可能性があります。