HOWTO · Java

エラー: 非静的変数カウントは Java の静的コンテキストから参照できません

このチュートリアルでは、Java の静的コンテキストから非静的変数カウントを参照することはできません。

このページの内容

このチュートリアルでは、Java での エラー: 非静的変数カウントを静的コンテキストから参照できません について説明します。

Javaのエラー:非静的変数カウントは静的コンテキストから参照できません

ほとんどの場合、メイン メソッドで非静的メンバー変数を使用しようとすると、エラー: 非静的変数カウントを静的コンテキストから参照できませんが発生します。 自動的に呼び出されます。 main() メソッドを呼び出すためにオブジェクトを作成する必要はありません。

エラー: 非静的変数カウントは静的コンテキストから参照できません を理解するには、まず、静的メソッドと非静的メソッドの概念を理解する必要があります。

静的メソッド

静的メソッドはクラスに属しますが、そのクラスのインスタンスには属しません。 静的メソッドは、クラスのインスタンスまたはオブジェクトなしで呼び出されます。

静的メソッドは、静的変数と、そのクラスおよび他のクラスの静的メソッドの他のメンバーにのみアクセスできます。 静的メソッドは、クラスの非静的メンバーにアクセスできません。

非静的メソッド

Static キーワードを含まないメソッドは非静的メソッドです。 非静的メソッドは、同じクラスまたは別のクラスの静的および非静的変数とメンバーにアクセスできます。

非静的メソッドは、静的データの値を変更することもできます。

Java の静的メソッドと非静的メソッドの例

静的メソッドと非静的メソッドを示す例を試してみましょう。

package delftstack;

class DelftstackDemo {
  // non-static variable
  int Demo;

  // Static method
  public static void increment() {
    // Using a Non-Static Variable in Static Method. Error
    Demo++;
  }
}

public class Example {
  // Static Main method
  public static void main(String args[]) {
    DelftstackDemo Demo1 = new DelftstackDemo();
    DelftstackDemo Demo2 = new DelftstackDemo();
    DelftstackDemo Demo3 = new DelftstackDemo();

    Demo1.Demo = 7;
    Demo2.Demo = 8;
    Demo3.Demo = 9;

    // Calling the method
    DelftstackDemo.increment();

    System.out.println(Demo1.Demo);
    System.out.println(Demo2.Demo);
    System.out.println(Demo3.Demo);
  }
}

上記のコードには 2つのクラスがあります。 最初のクラスでは、コードは静的メソッドで非静的メンバー変数を使用し、2 番目のクラスはメイン メソッドのインスタンスから非静的メンバーの値を変更しようとします。

コードはエラーをスローします。

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
	Cannot make a static reference to the non-static field Demo

	at delftstack.DelftstackDemo.increment(Example.java:12)
	at delftstack.Example.main(Example.java:29)

上記のコードは、非静的メンバー Demo が静的メソッドで使用されているため、エラーをスローします。 メソッド increment を非静的に変更し、最初のクラス インスタンスでそれを呼び出すと、問題が解決します。

解決策を参照してください:

package delftstack;

class DelftstackDemo {
  // non-static variable
  int Demo;

  // change to a non-static method
  public void increment() {
    // No error
    Demo++;
  }
}

public class Example {
  // Static Main method
  public static void main(String args[]) {
    DelftstackDemo Demo1 = new DelftstackDemo();
    DelftstackDemo Demo2 = new DelftstackDemo();
    DelftstackDemo Demo3 = new DelftstackDemo();

    Demo1.Demo = 7;
    Demo2.Demo = 8;
    Demo3.Demo = 9;

    // Calling the method
    Demo1.increment();

    System.out.println(Demo1.Demo);
    System.out.println(Demo2.Demo);
    System.out.println(Demo3.Demo);
  }
}

ここで、非静的メソッドで非静的メンバーを使用し、最初のクラスのインスタンスによって非静的メソッドをメインの静的に呼び出しています。 それは問題を解決します。

出力を参照してください:

8
8
9