Java

Java staticの使いどころとは?図解と具体例で徹底解説!

「Javaのstaticの使い方がいまいちピンとこない…」そんな悩みを抱えていませんか?
Javaでプログラムを書くとき、staticは避けて通れない重要なキーワードです。
しかし、初学者にとっては「いつ使うべきか」「使うと何が便利なのか」迷うことが多いですよね。
本記事では、staticの基本概念から具体的な使いどころ、さらには実際のコード例までを初心者でもわかりやすく徹底解説します。
これを読めば、staticの本当の便利さが理解でき、スッキリ解決できるはずです!

はじめに

Javaを学ぶ際に頻出する「static」というキーワード。

初心者の方は、「なぜ必要なのか」「いつ使うのか」などで迷うことが多いはずです。

本記事では、staticの基本から実用例までを詳しく解説し、staticの使いどころが一目でわかるようにします。

  • Javaのstaticメンバとは
  • Javaにおけるstaticメンバの使いどころ
punpee-code
punpee-code
Javaのstaticメンバの定義とその使いどころをしっかりと理解しよう!

Javaにおけるstaticメンバとは?

staticメンバについて

Javaのクラス内において、static修飾子がついているメソッドとメンバ変数を「クラス変数」「クラスメソッド」と言います。「static」とは「静的」という意味です。

そのクラスが専用で持っている変数やメソッドと言い換えることができるでしょう。

なお、staticメンバには「StaticClass.method()」のように、「クラス名.メンバ名」でアクセスすることができます。

インスタンスメンバについて

一方、staticのつかないメンバ変数やメソッドの事を、「インスタンス変数」「インスタンスメソッド」と言います。

このインスタンスメンバは、newでインスタンス化して初めてメモリ上に保持されていますが、staticメンバはインスタンス化せずともJavaの実行時にすでにメモリ上に保持されいる違いがあります。

後者のstaticメンバは、クラス専用の変数やメソッドだからですね。

 

下記に両者の違いを表と図にしてまとめました。

【特徴】【staticメンバ】【インスタンスメンバ】
所属クラス全体に属する各インスタンスに属する
メモリ上の管理プログラム開始時に確保されるnewでインスタンス生成時に確保される
アクセス方法クラス名.メンバ名インスタンス名.メンバ名
主な用途共通の処理やデータオブジェクトごとに異なるデータを管理
staticメンバとインスタンスメンバの違いの図

staticの使いどころをマスターしよう

Javaにおいて、staticは非常に便利な修飾子ですが、適切に使うことが重要です。ここでは代表的な6つの使い方を紹介します。

1. ユーティリティメソッドの利用

Mathクラスなど、共通の計算や処理を提供する際に使用されます。

オブジェクトの状態に依存しないため、インスタンスを作らずに利用することができます。

例: Mathクラスのメソッド

// インスタンスを生成すると、無駄なメモリ使用が増えるため、staticが適している
double result = Math.sqrt(25);  // インスタンス化不要

 

2. ファクトリメソッド

特定の条件でオブジェクトを生成する便利なメソッドを提供します。

public class Person {
    private String name;
    private Person(String name) {
        this.name = name;
    }
    public static Person create(String name) {
        return new Person(name);
    }
}

// インスタンス化のロジックを隠蔽し、再利用性を高めるために有用
Person person = Person.create("Taro");

 

3. プログラム全体で共通のデータや動作を管理

Configクラスなどの設定クラスで、グローバルにアクセス可能なメソッドや定数を管理します。

public class Config {
    private static String appName = "MyApp";
    
    public static String getAppName() {
        return appName;
    }
}

String name = Config.getAppName();  // どこからでもアクセス可能

 

4. ヘルパークラスの実装

入出力処理や文字列操作などの補助的な処理をまとめるクラスで使われます。

public class StringUtils {
    public static boolean isNullOrEmpty(String str) {
        return str == null || str.isEmpty();
    }
}

boolean result = StringUtils.isNullOrEmpty("");

 

5. 列挙型(enum)に関連する処理

public enum Color {
    RED, GREEN, BLUE;

    public static Color fromString(String name) {
        return Color.valueOf(name.toUpperCase());
    }
}

Color color = Color.fromString("red");

 

6.エントリポイント(mainメソッド)

Javaを実行した際の開始点として使われます。

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

 

よくある質問(FAQ)

Q: 「インスタンスメンバ」と「staticメンバ」の使い方の違いを教えてください

以下のように、newでインスタンス化してメンバにアクセスしなければならないかどうかという違いがあります。

なお、下記の※2のように、非推奨ではありますが、staticメソッドにはインスタンス経由でアクセスすることができます。

public class Main {
    public void instanceMethod() {
        System.out.println("インスタンス化しないと利用できないメソッドです");
    }

    public static void staticMethod() {
        System.out.println("staticなメソッドです");
    }

    public static void main(String[] args) {
        // インスタンスメソッドにアクセス
        Main obj = new Main();
        obj.instanceMethod();
        // Main.instanceMethod(); ※1:staticとしてアクセスするとコンパイルエラー

        // staticメソッドにアクセス
        Main.staticMethod();
        obj.staticMethod(); // ※2:非推奨だが、staticメソッドにはインスタンス経由でアクセスできる
    }
}

 

おわりに

Javaのstaticメンバまとめ
  • Javaのstaticメソッドは、そのクラスが専用で持っている変数やメソッド
  • staticメンバはインスタンス化せず用いることができる
  • staticメンバの使いどころは、共通の計算や処理を行う際など