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();
}
}
静的メンバである静的フィールドをグローバル変数のように用いることは、可読性を難しくし、好ましくないため上記の例はおススメしません。
一応、エラーは出ないという点で紹介しました。