例で説明されたJava静的キーワード

staticとはどういう意味ですか?

変数またはメソッドを静的として宣言すると、特定のインスタンスではなく、クラスに属します。これは、クラスの複数のオブジェクトを作成した場合、または作成しなかった場合でも、静的メンバーのインスタンスが1つだけ存在することを意味します。すべてのオブジェクトで共有されます。

staticキーワードは、変数、メソッド、コードブロック、およびネストされたクラスで使用できます。

静的変数

例:

public class Counter { public static int COUNT = 0; Counter() { COUNT++; } }

COUNT変数は、そのクラスのすべてのオブジェクトによって共有されます。mainでCounterクラスのオブジェクトを作成し、静的変数にアクセスするとき。

public class MyClass { public static void main(String[] args) { Counter c1 = new Counter(); Counter c2 = new Counter(); System.out.println(Counter.COUNT); } } // Outputs "2"

COUNT変数は静的であり、Counterクラスの新しいオブジェクトが作成されるたびに1ずつ増加するため、outoutは2です。など、そのクラスの任意のオブジェクトを使用して静的変数にアクセスすることもできますc1.COUNT

静的メソッド

静的メソッドは、インスタンスではなくクラスに属します。したがって、クラスのインスタンスを作成せずに呼び出すことができます。クラスの静的コンテンツを変更するために使用されます。静的メソッドにはいくつかの制限があります。

  1. 静的メソッドは、クラスの非静的メンバー(変数または関数)を使用できません。
  2. 静的メソッドはthisまたはsuperキーワードを使用できません。

例:

public class Counter { public static int COUNT = 0; Counter() { COUNT++; } public static void increment(){ COUNT++; } }

静的メソッドは、クラスのインスタンスから呼び出すこともできます。

public class MyClass { public static void main(String[] args) { Counter.increment(); Counter.increment(); System.out.println(Counter.COUNT); } } // Outputs "2"

静的メソッドによってインクリメントされるため、出力は2increament()です。静的変数と同様に、静的メソッドにもインスタンス変数を使用してアクセスできます。

静的ブロック

静的コードブロックは、静的変数を初期化するために使用されます。これらのブロックは、静的変数の宣言の直後に実行されます。

例:

public class Saturn { public static final int MOON_COUNT; static { MOON_COUNT = 62; } }
public class Main { public static void main(String[] args) { System.out.println(Saturn.MOON_COUNT); } } // Outputs "62"

変数にMOON_COUNTは静的ブロックでその値が割り当てられているため、出力は62です。

静的ネストクラス

クラスは、外部クラス名を使用してアクセスできる静的なネストされたクラスを持つことができます。

例:

public class Outer { public Outer() { } public static class Inner { public Inner() { } } }

上記の例では、クラスInnerはクラスの静的メンバーとして直接アクセスできますOuter

public class Main { public static void main(String[] args) { Outer.Inner inner = new Outer.Inner(); } }

Javaで一般的に使用されているBuilderパターンの静的ネストクラスのユースケースの1つ。