【java】static は変数・メソッドを作る

クラスに属するメンバー(変数・メソッド)を作る

オブジェクトに属さない

  • new しなくても使える
  • クラス名から直接使える

static なし(普通)

Task t = new Task("勉強");
t.toggleDone();

static あり

Math.random(); // ← new してない

Mathクラスは Java標準のクラスだけど、どのメソッドも static
→インスタンスを作らず、すぐ使える


static の種類

static メソッド

public static void hello() {
    System.out.println("こんにちは");
}

// 呼び出し方
TaskManager.hello();
  • new しなくていい
  • 状態(プロパティ)を持つ必要がない処理に使う

static 変数

クラス全体で共有する変数

public static int count = 0;

全インスタンスで 1つしか存在しない

例:生成したタスクの総数を数えるときなど。


static を使うべき?

使うべき場面

  • 何かの「ユーティリティ処理」をまとめたいとき
    例:文字数カウント、日付フォーマット、乱数生成など
  • クラス単位で共有したい値があるとき
    例:クラス全体のID採番

使わないほうがいい場面

  • Task や TaskManager のように「状態(データ)」を持つオブジェクトを扱うとき
    static は共有されてしまうから
    例:複数の TaskManager を new したら、static だとデータが全部まとめて共有されて変なことに

Main の static の意味は?

public static void main(String[] args) {

Java がアプリを起動するとき、最初に呼ぶメソッドは static でないと困る

→ Java はまだ何も new してないから!

main はインスタンスがなくても呼べる必要があるstatic が必須!