【Java】error: non-static method 〇〇 cannot be referenced from a static context 解決方法

error: non-static method 〇〇 cannot be referenced from a static contextの解決方法を紹介します。

このエラーを解決するには、静的メンバを理解する必要があります。

原因

静的メンバについて理解しているうえで話を進めます。

このエラーは、静的メソッドとして呼び出してますが、静的メソッドになっていませんよというエラーです。

静的メソッドは、クラスに実体が準備されるため、インスタンスを生成しなくても呼び出すことができます。

しかし、そのメソッドが静的メソッドではなく普通のメソッドであるため、呼び出せません。

具体例

public class Greet{
    public String lang; //フィールド
    public void Hello(){}; //メソッド
}
public class Main{
    public static void main(String [] args){
        Greet.lang = "ja"; // インスタンスなしでの呼び出しによるエラー
        Greet.Hello(); // インスタンスなしでの呼び出しによるエラー
    }
}

解決方法

インスタンスを生成して、メンバを呼び出す

具体例

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();
    }
}

静的メンバである静的フィールドをグローバル変数のように用いることは、可読性を難しくし、好ましくないため上記の例はおススメしません。

一応、エラーは出ないという点で紹介しました。