0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaのstaticメソッドがインスタンス変数にアクセスできない理由を初心者向けに整理してみた

0
Posted at

Javaのstaticメソッドがインスタンス変数にアクセスできない理由を初心者向けに整理してみた

はじめに

Java Silverの勉強中に、staticメソッドからインスタンス変数にアクセスできない理由が分からず混乱しました。
スクリーンショット 2026-06-20 17.47.29.png

この記事では、自分の理解を整理するために、初心者向けにまとめます。

結論

staticメソッドは、インスタンスを作らなくても呼び出せるメソッドです。

一方で、インスタンス変数は、インスタンスを作って初めて使える変数です。

そのため、staticメソッドからインスタンス変数を直接使おうとすると、

「どのインスタンスの値を使えばいいの?」

と判断できないため、コンパイルエラーになります。

staticメソッドとは

staticメソッドは、クラスに属するメソッドです。

たとえば、次のようにインスタンスを作らなくても呼び出せます。

Sample.java
class Sample {
    static void hello() {
        System.out.println("Hello");
    }
}

public class Main {
    public static void main(String[] args) {
        Sample.hello();
    }
}

このように、static が付いたメソッドは、Sample.hello() のようにクラス名から呼び出すことができます。

インスタンス変数とは

インスタンス変数は、インスタンスごとに持つ変数です。

Sample.java
class Sample {
    int num = 10;
}

この num は、Sample クラスから作られたオブジェクトごとに存在します。

Sample.java
Sample a = new Sample();
Sample b = new Sample();

a.num = 10;
b.num = 20;

この場合、a.numb.num は別々の値を持ちます。

なぜstaticメソッドから直接アクセスできないのか

次のコードはコンパイルエラーになります。

Sample.java
class Sample {
    int num = 10;

    static void printNum() {
        System.out.println(num);
    }
}

理由は、printNum() がstaticメソッドだからです。

staticメソッドは、インスタンスを作らなくても呼び出せます。

Sample.java
Sample.printNum(); // クラス名.staticメソッド名()で呼び出せる

でも、num はインスタンス変数です。

つまり、a.num なのか、b.num なのか、どのインスタンスの num を使えばいいのか分かりません。

そのため、Javaではstaticメソッドからインスタンス変数に直接アクセスできないようになっています。

アクセスしたい場合はどうするか

インスタンスを作って、そのインスタンス経由でアクセスします。

Sample.java
class Sample {
    int num = 10;

    static void printNum() {
        Sample s = new Sample(); // インスタンス生成
        System.out.println(s.num);
    }
}

または、引数としてインスタンスを受け取る方法もあります。

Sample.java
class Sample {
    int num = 10;

    static void printNum(Sample s) {
        System.out.println(s.num);
    }
}

public class Main {
    public static void main(String[] args) {
        Sample s = new Sample();
        Sample.printNum(s);
    }
}

このように、インスタンス変数を使いたい場合は、どのインスタンスの値を使うのかを明確にする必要があります。

まとめ

  • staticメソッドはクラスに属する
  • インスタンス変数はインスタンスに属する
  • staticメソッドはインスタンスなしで呼び出せる
  • staticメソッドからインスタンス変数を直接使うことはできない
  • 使いたい場合は、インスタンスを作ってアクセスする
  • または、引数としてインスタンスを受け取る

最後に

この記事は以下を参考に記載しました。
徹底攻略Java SE 17 Silver問題集[1Z0-825]対応

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?