Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【Java】インスタンス変数とクラス変数の違いについて

目的

インスタンス変数とクラス変数の違いについて理解するため

検証環境

  • Eclipse Oxygen.3a Release (4.7.3a)
  • Java8

検証用ソースコード

1.クラス変数とインスタンス変数

qiita.java
public class Oimo {
    public static int CNT_CLASS; // クラス変数
    public int CNT_INSTANCE; // インスタンス変数
}

2.クラス変数を試す

qiita.java
public class Kensho01 {

    public static void main(String[] args) {
        // クラス変数
        Oimo oimo3 = new Oimo();
        Oimo oimo4 = new Oimo();

        oimo3.CNT_CLASS = 30;

        System.out.println(oimo4.CNT_CLASS); // 30が出力される
    }
}

3.インスタンス変数を試す

qiita.java
public class Kensho01 {

    public static void main(String[] args) {
        // インスタンス変数
        Oimo oimo1 = new Oimo();
        Oimo oimo2 = new Oimo();

        oimo1.CNT_INSTANCE = 10;

        System.out.println(oimo2.CNT_INSTANCE); // 0が出力される
    }
}

実施手順

  • クラス変数とインスタンス変数を持ったOimoクラスを用意。2つのOimoインスタンスを生成し、1つ目のインスタンスのクラス変数およびインスタンス変数に対して値を設定後、2つ目のOimoインスタンスに設定されているクラス変数およびインスタンス変数の値を確認する。

実施結果

  • 1つ目のインスタンスのクラス変数に30を設定したところ、2つ目のインスタンスのクラス変数にも30が設定された。
  • 1つ目のインスタンスのインスタンス変数に10を設定したところ、2つ目のインスタンスのインスタンス変数には0が設定された。

考察

インスタンス変数はインスタンス毎に参照する変数で、クラス変数は複数インスタンスが共通で参照する変数ということが分かった。スレッドセーフなプログラムを組もうと思ったら、この知識は大切なことが分かる。

ではまた(^_^)ノシ

wa-papa-eto
都内でバックエンド開発案件中心にフリーランスエンジニアとして活動中! コーディングが好きだけど、仕事としては要件定義や基本設計が中心です。 今年は技術系の文献を英語で読めるようになりたい>< システム開発歴:9年(Java:7年、VB:2年) システム運用歴:3年(RHEL、AIX、Solaris) MYブログ:https://wa-papaeto.com/
https://wa-papaeto.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away