この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:1
ページ更新者:guest
更新日時:2017-08-15 01:23:14

タイトル: staticと非staticの違い
SEOタイトル: Java の static / 非 static の違いと使い分け

この記事の要点
  • Java の static と非 static の違い
  • static: クラス自体に紐づく(インスタンス化不要、全インスタンス共有)
  • 非 static: 個別インスタンスに紐づく
  • static は ClassName.method() で呼べる。ユーティリティ・定数定義に向く

 

Javaのstaticと非staticの違いについての記事です。

以下、プログラムを用いてそれぞれの違いについて検証します。

 

【検証プログラム】

□呼び出される側のクラス

public class TestClass {

    //static変数
    private static int staticVal;

    //インスタンス(メンバ)変数
    private int instanceVal;


    //staticメソッド
    public static int getValStaticMethod() {
        return staticVal;
    }

    //インスタンス(メンバ)メソッド
    public int getValInstanceMethod() {
        return this.instanceVal;
    }

    //staticメソッド
    public static void setValStaticMethod(int arg) {
        staticVal = arg;
    }

    //インスタンス(メンバ)メソッド
    public void setValInstanceMethod(int arg) {
        this.instanceVal = arg;
    }

}

 

□呼び出す側のクラス

public class main {

    public static void main(String[] args) {

        //static変数に値を設定(メソッドの使用や変数を参照する際にインスタンス化する必要がない)
        TestClass.setValStaticMethod(100);

        //static変数を取得
        System.out.println("staticVal = " + TestClass.getValStaticMethod());


        /*
         * static変数とインスタンス変数の違いを検証
         */
        //オブジェクト1を生成してstatic変数とインスタンス変数に値を設定する
        TestClass obj1 = new TestClass();
        obj1.setValInstanceMethod(111);
        obj1.setValStaticMethod(200); //オブジェクトにしてstaticメソッドを呼び出すこともできるが、意味合いは同じ


        //オブジェクト2を生成してstatic変数とインスタンス変数に値を設定する
        TestClass obj2 = new TestClass();
        obj2.setValInstanceMethod(222);
        obj2.setValStaticMethod(300);

        //インスタンス変数はオブジェクト毎に別物扱いされるが、static変数はクラスで共有の値となる
        System.out.println("obj1 instanceVal = " + obj1.getValInstanceMethod());
        System.out.println("obj1 staticVal = " + obj1.getValStaticMethod());
    }
}
 

【出力結果】

staticVal = 100
obj1 instanceVal = 111
obj1 staticVal = 300