【Java】staticとは?

HelloWorldのサンプルコードをよく見ると、メソッドにstaticという単語が確認できます。

このstaticとは何者なのでしょうか。

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

このようなメソッドは、静的メソッドといいます。

また、静的フィールドと合わせて、静的メンバといいます。

静的メンバとは

フィールドやメソッドにstaticが付いているメンバを静的メンバといいます。

private int number01; //フィールド
public void method01(){ //メソッド
    .....
}
private static int number01; //静的フィールド
public static void method01(){ //静的メソッド
    .....
}

他のクラスのメンバを呼ぶ際、インスタンスを生成して実行します。

public class Greet{
    public String lang; //フィールド
    public void Hello(){}; //メソッド
}
public class Main{
    public static void main(String [] args){
        Greet g = new Greet(); //インスタンスを生成
        g.lang = "ja"; //フィールド呼び出し
        g.Hello(); //メソッド呼び出し
    }
}

しかし、静的メンバは、インスタンスを生成しなくても呼び出すことができます。

public class Greet{
    public static String lang; //静的フィールド
    public static void Hello(){}; //静的メソッド
}
public class Main{
    public static void main(String [] args){
        Greet.lang = "ja"; //静的フィールド呼び出し
        Greet.Hello(); //静的メソッド呼び出し
    }
}

使いどころ

staticは、インスタンスを生成せずに呼び出すことができますが、Javaのオブジェクト指向を瓦解する機能だけにあまり使うことは、ないように思います。

しかし、Java APIでは、よく用いられており静的メソッドとして準備されているため、インスタンスを生成することなく、すぐに呼び出すことができます。

静的フィールドは、クラス間でも影響する変数となり得る変数(グローバル変数)になるため、定数として読み取り専用の用途として用いられることが多いです。