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が必要です。
- プログラムのエントリーポイントとして、JVMがオブジェクト生成なしに直接呼び出す必要があるため
- 定数:
public static final int MAX_VALUE- すべての場所から簡単にアクセスでき、共有される単一の値であるため
staticとfinalが組み合わされます。
- すべての場所から簡単にアクセスでき、共有される単一の値であるため
staticキーワードは、Javaの設計において、インスタンス固有の機能とクラス共通の機能を明確に区別するための重要なツールです。

