Javaのstaticメソッドとインスタンスメソッドの違いとは?

最終更新日

Schoo Java入門 初級【2026年版】

本記事は、Schooの「Java入門 初級【2026年版】」第6回「メソッド」を学ぶ前後に、static メソッドとインスタンスメソッドの違いを整理したい方向けのステップアップ学習記事です。

ただし、Schooを受講していない方でも、クラス、オブジェクト、フィールド、メソッドを学び始めた段階で読み進められる内容にしています。

Schoo コースページ:Java入門 初級【2026年版】

Javaのメソッドには、static が付くメソッドと、static が付かないメソッドがあります。どちらもメソッドですが、呼び出す相手が違います。

staticメソッドはクラスに対して呼び出す

static メソッドは、オブジェクトを作らなくても呼び出せるメソッドです。他のクラスから呼び出すときは、基本的に クラス名.メソッド名() の形で書きます。

public class MathUtil {
    public static int add(int price, int shippingFee) {
        return price + shippingFee;
    }
}
int total = MathUtil.add(1200, 300);
System.out.println(total);

この例では、new MathUtil() のようにオブジェクトを作っていません。MathUtil というクラスに用意された共通の計算処理として、add メソッドを呼び出しています。

図解:staticメソッドとインスタンスメソッドは、呼び出す相手が違う
staticメソッド
int total = MathUtil.add(1200, 300);
// クラス名.メソッド名 で呼び出す
MathUtil クラス
オブジェクトを作らず、計算などの共通処理を呼び出す
インスタンスメソッド
Student student = new Student(“田中”, 82);
student.printStatus();
// 変数名.メソッド名 で呼び出す
student オブジェクト
そのオブジェクトが持つ name や score を使って動く
static メソッドはクラスに対して呼び出し、インスタンスメソッドは new で作ったオブジェクトに対して呼び出します。

インスタンスメソッドはオブジェクトに対して呼び出す

static が付かないメソッドは、インスタンスメソッドです。インスタンスメソッドは、new で作ったオブジェクトに対して呼び出します。

public class Student {
    String name;
    int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public void printStatus() {
        System.out.println(name + "さんの点数は" + score + "点です");
    }
}
Student student = new Student("田中", 82);
student.printStatus();

printStatus メソッドは、student オブジェクトが持っている namescore を使って表示します。そのため、Student.printStatus() のようにクラス名だけで呼び出すのではなく、student.printStatus() のようにオブジェクトに対して呼び出します。

フィールドを使うならインスタンスメソッド

初学者が見分けるときは、「そのメソッドがオブジェクトごとのフィールドを使うか」を考えると整理しやすくなります。

  • MathUtil.add(1200, 300):渡された値だけで計算できるため、static メソッドにしやすい
  • student.printStatus():その学生の namescore を使うため、インスタンスメソッドにする

すべてのメソッドを static にすればよい、という話ではありません。オブジェクトごとの状態を使う処理は、インスタンスメソッドとして考えるのが自然です。

呼び出し方の違いを比べる

// staticメソッド
int total = MathUtil.add(1200, 300);

// インスタンスメソッド
Student student = new Student("田中", 82);
student.printStatus();

上の2つは、どちらもメソッド呼び出しです。ただし、MathUtil.add(...) はクラスに対して呼び出しており、student.printStatus() はオブジェクトに対して呼び出しています。

確認問題

  1. MathUtil.add(1200, 300) は、クラスとオブジェクトのどちらに対してメソッドを呼び出していますか。
  2. student.printStatus() は、なぜ Student.printStatus() ではなく student から呼び出すのでしょうか。
  3. オブジェクトごとの namescore を使う処理は、staticメソッドとインスタンスメソッドのどちらに向いていますか。

演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。

あわせて読みたい関連記事

まとめ

static メソッドは、クラスに対して呼び出すメソッドです。インスタンスメソッドは、new で作ったオブジェクトに対して呼び出すメソッドです。計算のように渡された値だけで処理できるものは static、オブジェクトごとのフィールドを使うものはインスタンスメソッド、と考えると整理しやすくなります。

シェアする