💡 staticキーワードの使い方

staticキーワードは、フィールド、メソッド、およびネストされたクラスに使用され、その要素が特定のオブジェクト(インスタンス)に属するのではなく、クラス自体に属することを示します。

1. staticなフィールド:クラス変数

フィールドにstaticを付けると、それは「クラス変数」となります。

  • 特徴: そのクラスのすべてのオブジェクトで共有される単一のメモリ領域を持ちます。どのオブジェクトからアクセスしても、値は常に同じです。
  • 用途: オブジェクト全体で共通するデータ(例: 定数インスタンスの総数設定値など)を保持するために使われます。
  • アクセス: オブジェクトを作成しなくても、クラス名.フィールド名で直接アクセスできます。

Java

public class Counter {
    // staticフィールド (全てのCounterオブジェクトで共有される)
    public static int totalCount = 0; 
    
    public Counter() {
        totalCount++; // オブジェクトが作られるたびにカウントアップ
    }
}
// 呼び出し例: int count = Counter.totalCount; 

🛠️ 2. staticなメソッド:クラスメソッド

メソッドにstaticを付けると、それは「クラスメソッド」となります。

  • 特徴: オブジェクトを生成しなくても、クラス名.メソッド名()で呼び出すことができます。
  • 用途: 主にユーティリティ(便利機能)や定数を操作するロジックなど、特定のオブジェクトの状態に依存しない処理に使われます。(例: Math.random()System.out.println()
  • 制約: staticメソッド内からは、staticな(インスタンスごとの)フィールドやメソッドを直接呼び出すことはできません。これは、staticメソッドが実行されるとき、まだそのクラスのオブジェクトが存在しない可能性があるためです。

Java

public class Calculator {
    // staticメソッド (オブジェクトなしで呼び出し可能)
    public static int add(int a, int b) {
        return a + b;
    }
}
// 呼び出し例: int result = Calculator.add(5, 3);

📌 3. staticの代表例

これまで学習してきた中で、staticは多くの場所で使われています。

  • mainメソッド: public static void main(String[] args)
    • プログラムのエントリーポイントとして、JVMがオブジェクト生成なしに直接呼び出す必要があるためstaticが必要です。
  • 定数: public static final int MAX_VALUE
    • すべての場所から簡単にアクセスでき、共有される単一の値であるためstaticfinalが組み合わされます。

staticキーワードは、Javaの設計において、インスタンス固有の機能クラス共通の機能を明確に区別するための重要なツールです。