オブジェクトに属さない
- new しなくても使える
- クラス名から直接使える
Task t = new Task("勉強");
t.toggleDone();
Math.random(); // ← new してないMathクラスは Java標準のクラスだけど、どのメソッドも static
→インスタンスを作らず、すぐ使える
public static void hello() {
System.out.println("こんにちは");
}
// 呼び出し方
TaskManager.hello();newしなくていい- 状態(プロパティ)を持つ必要がない処理に使う
クラス全体で共有する変数
public static int count = 0;全インスタンスで 1つしか存在しない
例:生成したタスクの総数を数えるときなど。
- 何かの「ユーティリティ処理」をまとめたいとき
例:文字数カウント、日付フォーマット、乱数生成など - クラス単位で共有したい値があるとき
例:クラス全体のID採番
- Task や TaskManager のように「状態(データ)」を持つオブジェクトを扱うとき
→staticは共有されてしまうから
例:複数の TaskManager をnewしたら、staticだとデータが全部まとめて共有されて変なことに
public static void main(String[] args) {Java がアプリを起動するとき、最初に呼ぶメソッドは static でないと困る
→ Java はまだ何も new してないから!
main はインスタンスがなくても呼べる必要がある → static が必須!

