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

本記事は、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 メソッドはクラスに対して呼び出し、インスタンスメソッドは 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 オブジェクトが持っている name と score を使って表示します。そのため、Student.printStatus() のようにクラス名だけで呼び出すのではなく、student.printStatus() のようにオブジェクトに対して呼び出します。
フィールドを使うならインスタンスメソッド
初学者が見分けるときは、「そのメソッドがオブジェクトごとのフィールドを使うか」を考えると整理しやすくなります。
MathUtil.add(1200, 300):渡された値だけで計算できるため、staticメソッドにしやすいstudent.printStatus():その学生のnameやscoreを使うため、インスタンスメソッドにする
すべてのメソッドを static にすればよい、という話ではありません。オブジェクトごとの状態を使う処理は、インスタンスメソッドとして考えるのが自然です。
呼び出し方の違いを比べる
// staticメソッド
int total = MathUtil.add(1200, 300);
// インスタンスメソッド
Student student = new Student("田中", 82);
student.printStatus();
上の2つは、どちらもメソッド呼び出しです。ただし、MathUtil.add(...) はクラスに対して呼び出しており、student.printStatus() はオブジェクトに対して呼び出しています。
確認問題
MathUtil.add(1200, 300)は、クラスとオブジェクトのどちらに対してメソッドを呼び出していますか。student.printStatus()は、なぜStudent.printStatus()ではなくstudentから呼び出すのでしょうか。- オブジェクトごとの
nameやscoreを使う処理は、staticメソッドとインスタンスメソッドのどちらに向いていますか。
演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。
あわせて読みたい関連記事
まとめ
static メソッドは、クラスに対して呼び出すメソッドです。インスタンスメソッドは、new で作ったオブジェクトに対して呼び出すメソッドです。計算のように渡された値だけで処理できるものは static、オブジェクトごとのフィールドを使うものはインスタンスメソッド、と考えると整理しやすくなります。