Javaの `static`キーワードは、メモリ効率の良いコードを作成するための修飾子です。オブジェクト、変数、メソッド定義が占めるメモリを管理するのに役立ちます。 staticキーワードは、関連するメソッド、オブジェクト、または変数がメモリ内に作成されたインスタンスが1つだけ存在することを確認します。

これは、特定の属性値を管理するためにクラスレベルの変数を持つ必要がある場合や、特定の操作を実行するためにクラスレベルのメソッドが必要な場合にも使用されます。 staticキーワードの使用については、以下の各コンテンツで詳しく説明します。

1.可変修飾語としてのSTATICキーワード

変数に使用される場合、静的キーワードは、変数がクラスごとに1回だけインスタンス化されるべきであることを示します。作成されるオブジェクトの数に関係なく、データ型ごとに1つのメモリユニットを占有します。

したがって、staticキーワードの値は、特定のクラスのすべてのオブジェクトで共通です。

静的変数は、オブジェクトインスタンスにアクセスするためにオブジェクトインスタンスを必要としない変数の一種です。 `<classname>。<variablename>`という構文を使って直接アクセスできます。

例をあげて理解してみましょう。

以下のコードは、Employeeの特定の詳細を保持するクラスです。これは、作成中の従業員の数をカウントするために使用されている静的変数 “count”を含んでいます。

Employee.java

package com.techfou;

public class Employee {

    static int count = 0;
    private String name;
    private int leaves;

    Employee() {
        count++;
    }

    Employee(String name, int leaves) {
        this.name = name;
        this.leaves = leaves;
        count++;
    }

    public static int getCount() {
        return count;
    }

    public static void setCount(int count) {
        Employee.count = count;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getLeaves() {
        return leaves;
    }

    public void setLeaves(int leaves) {
        this.leaves = leaves;
    }

}

以下のクラスは静的変数の機能と動作をテストするために作成されたテストクラスです。コードを実行すると、静的変数 “count”の値がすべての従業員オブジェクトで共有されていることがわかります。

StaticVariableExample.java

package com.techfou;

public class StaticVariableExample {

    public static void main(String[]args) {

        Employee e1 = new Employee("Employee1", 5);
        Employee e2 = new Employee("Employee2", 10);

        System.out.println("Employee Count using e1: " + e1.getCount());
        System.out.println("Employee Count using e2: " + e2.getCount());
        System.out.println("Employee Count using static reference: " + Employee.getCount());

    }

}

Employeeクラスでは、 “count”はクラスごとに1回インスタンス化された静的変数です。したがって、作成するオブジェクトの数にかかわらず、「カウント」の値はすべてのオブジェクトにわたって共有されます。これらのオブジェクトは出力に明示的に表示されます。

StaticExampleクラスを実行すると、次のように出力が取得されます。

Employee Count using e1: 2
Employee Count using e2: 2
Employee Count using static reference: 2

2.メソッド修飾子としてのSTATICキーワード

Javaの静的メソッドは、開発者がメソッドを直接ユーザーに公開したい場合、つまりメソッドを呼び出すための実際のオブジェクトを作成する必要がない場合に使用されます。静的メソッドは、 `<classname>。<methodname> ‘という構文を使用して直接呼び出すことができます。

静的メソッドは、静的変数およびオブジェクトに対してのみ機能することができます。それに加えて、静的メソッドによって行われるメソッド呼び出しは、順番に静的メソッドを参照する必要があります。

これを例を使って理解してみましょう:

StaticMethodExample.java

package com.mkyong;

public class StaticMethodExample {

    private int x = 0;
    private static int y = 0;

    public static void main(String[]args) {
       //If uncommented, x++ gives compilation error
       //x++;

       //y++ works fine without compilation error
        y++;

       //If uncommented, sayHello() gives compilation error
       //sayHello();

       //sayHi() works fine without compilation error
        sayHi();
        System.out.println("Value of y is: " + y);
    }

    public void sayHello() {
        System.out.println("Hello");
    }

    public static void sayHi() {
        System.out.println("Hi");
    }

}

上記のコードにもコメントを書き留めてください。静的関数から非静的変数またはメソッドを参照する際にコンパイルエラーが発生する可能性のあるコンテキストを指定します。上記のコードを実行すると、次のような出力が得られます。

Hi
Value of y is: 1

ソースコードをダウンロードする

ダウンロードする – リンク://wp-content/uploads/2016/11/StaticKeyword.zip[StaticKeyword.zip(6 KB)]