カテゴリ: Javaのメソッド 更新日: 2026/01/02

Java の static メソッドとは?クラスメソッドの基本

108
Java の static メソッドとは?クラスメソッドの基本

新人と先輩の会話形式で理解しよう

新人

「Java の static メソッドって何ですか?」

先輩

「static メソッドは、クラスに属するメソッドで、インスタンスを作らずに使えるメソッドのことだよ。」

新人

「インスタンスを作らずに使えるってどういうことですか?」

先輩

「それじゃあ、static メソッドの基本から詳しく説明していこう!」

1. Java の static メソッドとは?(基本的な説明)

1. Java の static メソッドとは?(基本的な説明)
1. Java の static メソッドとは?(基本的な説明)

Java の static メソッドとは、クラスに直接属するメソッドのことです。通常のメソッドは、クラスのインスタンスを作成しないと使えませんが、static メソッドはインスタンスを作らずに直接呼び出せます。

static メソッドの基本構文


public class Sample {
    public static void sayHello() {
        System.out.println("こんにちは!");
    }

    public static void main(String[] args) {
        sayHello(); // static メソッドの呼び出し
    }
}

こんにちは!

このように、sayHello メソッドは static キーワードをつけることで、インスタンスを作らなくても main メソッドから直接呼び出せます。

2. static メソッドを使う理由と利点

2. static メソッドを使う理由と利点
2. static メソッドを使う理由と利点

static メソッドを使うと、次のようなメリットがあります。

static メソッドを使う理由

  • ✔ クラスに関連する処理をまとめられる
  • ✔ インスタンスを作らなくても使えるので便利
  • ✔ 計算処理などの共通処理をまとめるのに最適

static メソッドの活用例

例えば、数学的な計算を行うメソッドを static にしておくと、どのクラスからでも簡単に使えます。


public class MathUtil {
    public static int square(int x) {
        return x * x;
    }

    public static void main(String[] args) {
        System.out.println("5の二乗: " + square(5));
    }
}

5の二乗: 25

このように、square メソッドを static にすることで、どこからでも直接呼び出せる便利なメソッドになります。

3. static メソッドの基本的な使い方(サンプルコード付き)

3. static メソッドの基本的な使い方(サンプルコード付き)
3. static メソッドの基本的な使い方(サンプルコード付き)

static メソッドは、クラスに属するメソッドなので、インスタンスを作成せずに直接呼び出すことができます。

基本的な static メソッドの使い方

例えば、数値の二乗を計算する static メソッドを作成し、それを呼び出す例を見てみましょう。


public class MathUtil {
    // static メソッドの定義
    public static int square(int num) {
        return num * num;
    }

    public static void main(String[] args) {
        // static メソッドの呼び出し
        int result = square(4);
        System.out.println("4の二乗: " + result);
    }
}

4の二乗: 16

このように、square メソッドは static なので、インスタンスを作らずに MathUtil.square(4) のように直接呼び出せます。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

4. インスタンスメソッドとの違い

4. インスタンスメソッドとの違い
4. インスタンスメソッドとの違い

static メソッドとインスタンスメソッド(通常のメソッド)には大きな違いがあります。どのように異なるのかを見てみましょう。

インスタンスメソッドとは?

通常のメソッド(インスタンスメソッド)は、クラスのインスタンス(オブジェクト)を作成しないと使えません。


public class Example {
    // インスタンスメソッド
    public int multiply(int a, int b) {
        return a * b;
    }

    public static void main(String[] args) {
        // インスタンスを作成してメソッドを呼び出す
        Example ex = new Example();
        int result = ex.multiply(3, 5);
        System.out.println("3 × 5 = " + result);
    }
}

3 × 5 = 15

static メソッドとの比較

インスタンスメソッドと static メソッドの違いを一覧でまとめました。

特徴 static メソッド インスタンスメソッド
インスタンスが必要か 不要 必要
クラス名で呼び出せるか 可能 不可
インスタンス変数を使えるか 使えない 使える

このように、static メソッドはクラス全体に関わる共通の処理に適しており、インスタンスメソッドはオブジェクトごとの異なるデータを扱うのに適しています。

5. static メソッドの注意点(制約と制限)

5. static メソッドの注意点(制約と制限)
5. static メソッドの注意点(制約と制限)

static メソッドには便利な点が多いですが、注意すべき点もいくつかあります。

インスタンス変数を使えない

static メソッドの中では、インスタンス変数(クラスのフィールド)は直接使用できません。


public class Counter {
    private int count = 0; // インスタンス変数

    public static void increment() {
        // count++; // これはエラーになる
    }
}

このように、static メソッド内ではインスタンス変数を直接使うことができません。どうしても使いたい場合は、オブジェクトを作成してからアクセスする必要があります。

オーバーライドできない

static メソッドは、サブクラスでオーバーライド(上書き)することができません。


class Parent {
    public static void showMessage() {
        System.out.println("親クラスのメッセージ");
    }
}

class Child extends Parent {
    public static void showMessage() {
        System.out.println("子クラスのメッセージ");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent.showMessage(); // 親クラスのメッセージ
        Child.showMessage();  // 子クラスのメッセージ
    }
}

親クラスのメッセージ
子クラスのメッセージ

このように、static メソッドは「メソッドの上書き(オーバーライド)」とは異なり、クラスごとに独立したものとして扱われます。

this キーワードが使えない

static メソッドでは this キーワードを使うことができません。なぜなら、this はインスタンス自身を指すものですが、static メソッドはインスタンスを必要としないからです。


public class Example {
    public void instanceMethod() {
        System.out.println(this); // OK(インスタンスメソッド)
    }

    public static void staticMethod() {
        // System.out.println(this); // エラーになる
    }
}

このように、static メソッドの中では this を使うことができません。

6. static メソッドを活用する実践的な例

6. static メソッドを活用する実践的な例
6. static メソッドを活用する実践的な例

static メソッドは、さまざまな場面で活用できます。特に、共通の処理をまとめておくと便利です。

数値計算を行う static メソッド

例えば、複数の数値計算を行うメソッドを static にすると、どこからでも簡単に呼び出せます。


public class MathUtil {
    // 足し算
    public static int add(int a, int b) {
        return a + b;
    }

    // 引き算
    public static int subtract(int a, int b) {
        return a - b;
    }

    // 掛け算
    public static int multiply(int a, int b) {
        return a * b;
    }

    // 割り算
    public static double divide(int a, int b) {
        if (b == 0) {
            throw new IllegalArgumentException("0で割ることはできません");
        }
        return (double) a / b;
    }

    public static void main(String[] args) {
        System.out.println("5 + 3 = " + add(5, 3));
        System.out.println("5 - 3 = " + subtract(5, 3));
        System.out.println("5 × 3 = " + multiply(5, 3));
        System.out.println("5 ÷ 3 = " + divide(5, 3));
    }
}

5 + 3 = 8
5 - 3 = 2
5 × 3 = 15
5 ÷ 3 = 1.6666666666666667

このように、計算処理を static メソッドにまとめることで、どのクラスからでも直接利用できる便利なメソッドになります。

7. static メソッドを使ったユーティリティクラスの作成

7. static メソッドを使ったユーティリティクラスの作成
7. static メソッドを使ったユーティリティクラスの作成

static メソッドは、ユーティリティクラス(便利な機能を集めたクラス)を作る際に特に役立ちます。

文字列操作を行うユーティリティクラス

例えば、文字列を操作する便利な static メソッドをまとめたクラスを作成できます。


public class StringUtil {
    // 文字列を大文字に変換する
    public static String toUpperCase(String str) {
        return str.toUpperCase();
    }

    // 文字列を反転する
    public static String reverse(String str) {
        return new StringBuilder(str).reverse().toString();
    }

    // 文字列が空かどうかを判定する
    public static boolean isEmpty(String str) {
        return str == null || str.isEmpty();
    }

    public static void main(String[] args) {
        String text = "java";

        System.out.println("大文字変換: " + toUpperCase(text));
        System.out.println("反転: " + reverse(text));
        System.out.println("空文字チェック: " + isEmpty(""));
    }
}

大文字変換: JAVA
反転: avaj
空文字チェック: true

このように、共通の処理を static メソッドにまとめた「ユーティリティクラス」を作ることで、コードの再利用性が高まります。

8. static メソッドを適切に使うためのポイント

8. static メソッドを適切に使うためのポイント
8. static メソッドを適切に使うためのポイント

static メソッドは便利ですが、適切に使わないと逆にコードの可読性が下がることがあります。以下のポイントを意識すると、より効果的に活用できます。

1. 状態を持たない処理に使う

static メソッドは、特定のオブジェクトの状態を管理しない処理に適しています。例えば、計算処理や文字列処理のように、外部から影響を受けない機能に使いましょう。

2. インスタンス変数を使う場合はインスタンスメソッドにする

static メソッドの中ではインスタンス変数を直接扱えません。もしオブジェクトのデータを操作するなら、通常のインスタンスメソッドを使うのが適切です。


public class Counter {
    private int count = 0;

    // インスタンスメソッド(インスタンス変数を使用する)
    public void increment() {
        count++;
    }

    public int getCount() {
        return count;
    }

    public static void main(String[] args) {
        Counter counter = new Counter();
        counter.increment();
        System.out.println("カウント: " + counter.getCount());
    }
}

カウント: 1

3. クラスごとの責務を意識する

static メソッドを無闇に増やすと、どのメソッドがどのクラスに属するべきか分かりにくくなります。処理の役割を明確にして、適切なクラスに static メソッドを配置しましょう。

4. 必要に応じてシングルトンパターンを活用する

特定のデータを一元管理したい場合は、static メソッドではなく、シングルトンパターンを使う方法もあります。


public class Singleton {
    private static Singleton instance = new Singleton();
    private int count = 0;

    private Singleton() {} // コンストラクタを private にする

    public static Singleton getInstance() {
        return instance;
    }

    public void increment() {
        count++;
    }

    public int getCount() {
        return count;
    }

    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        s1.increment();
        System.out.println("カウント: " + s1.getCount());

        Singleton s2 = Singleton.getInstance();
        s2.increment();
        System.out.println("カウント: " + s2.getCount());
    }
}

カウント: 1
カウント: 2

このように、static メソッドだけでなく、シングルトンパターンを使うことで、特定のデータを一元管理する方法もあります。

まとめ

まとめ
まとめ

staticメソッドの理解がJavaの基礎力を大きく高める

ここまで、Javaにおけるstaticメソッド、いわゆるクラスメソッドについて詳しく学んできました。staticメソッドは、インスタンスを生成せずに呼び出せるという大きな特徴を持ち、Javaプログラミングの中でも非常によく使われる重要な仕組みです。mainメソッドがstaticで定義されていることからも分かるように、プログラムの入り口や共通処理を担う場面で欠かせない存在です。

Javaの初心者が最初につまずきやすいポイントの一つが、「なぜインスタンスを作らなくても呼び出せるのか」という点ですが、staticメソッドはクラスそのものに紐づいているため、オブジェクトの状態に依存しない処理をまとめるのに適しています。計算処理や変換処理、ユーティリティクラスなど、どこからでも同じ結果が得られる処理はstaticメソッドとして定義するのが一般的です。

staticメソッドとインスタンスメソッドの違いを整理しよう

staticメソッドを正しく使いこなすためには、インスタンスメソッドとの違いをしっかり理解しておくことが大切です。インスタンスメソッドはオブジェクトごとの状態、つまりフィールドの値を使った処理ができますが、staticメソッドはクラス単位で存在するため、インスタンス変数を直接扱うことはできません。

そのため、staticメソッドの中ではstaticフィールドや、引数として受け取った値を使って処理を行うのが基本となります。この制約があるからこそ、「この処理は本当にオブジェクトに依存しているのか」「クラス共通の処理として切り出せないか」といった設計の視点が身につき、Javaのオブジェクト指向設計をより深く理解できるようになります。

まとめとしてのサンプルプログラム

staticメソッドの特徴を振り返るために、クラス共通の処理をまとめたシンプルなサンプルプログラムを確認してみましょう。インスタンスを生成せずに処理を呼び出している点に注目してください。


public class StringUtil {

    public static int lengthOf(String text) {
        return text.length();
    }

    public static void main(String[] args) {
        String word = "Java";
        int length = lengthOf(word);
        System.out.println("文字数: " + length);
    }
}

文字数: 4

この例では、文字列の長さを取得する処理をstaticメソッドとして定義しています。StringUtilクラスはユーティリティクラスとして使われ、どこからでも同じ方法で呼び出せます。このような設計は、実務でも非常によく使われており、Java標準ライブラリのMathクラスなども同じ考え方で作られています。

staticメソッドを使うか、インスタンスメソッドにするかを意識的に選べるようになると、クラスの責務が明確になり、読みやすく保守しやすいコードを書けるようになります。Javaの基礎文法として覚えるだけでなく、「なぜstaticにするのか」を考えながら使うことが大切です。

先生と生徒の振り返り会話

新人

「staticメソッドは、インスタンスを作らずに使える便利なメソッドなんですね。」

先輩

「そうだね。特に共通処理や計算処理では、staticメソッドがとても役立つよ。」

新人

「インスタンス変数が使えない理由も、クラスに属しているからだと分かりました。」

先輩

「その理解は大切だね。staticとインスタンスの違いを意識できると、設計力が一気に上がるよ。」

新人

「これからは、この処理はstaticにすべきかどうか考えながらコードを書いてみます。」

先輩

「それができれば、Javaの基礎はしっかり身についていると言えるね。」

Javaのメソッドの一覧へ
新着記事
FlutterのMVP・MVVMアーキテクチャの違いと使い分け
FlutterのMVP・MVVMアーキテクチャの違いと使い分けを初心者向けに解説!
オニオンアーキテクチャの基本とFlutterでの適用例
オニオンアーキテクチャの基本とFlutterでの適用例を初心者向けに解説
クリーンアーキテクチャとは?Flutterでの導入メリット
クリーンアーキテクチャとは?Flutterでの導入メリットをやさしく解説
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金まとめ
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金を初心者向けに徹底解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク