0

つまり、要するに。私には2つのクラスがあります。

package rpg;

public class Engine {
    public void main(String args[]) {
        Start.gameStart();
        System.out.println(menuResult);
    }
}

package rpg;
public class Start {
    int menuResult = 3;
    public int gameStart() 
    {
        return menuResult;
    }
    public int getMenuResult()
    {
        return Start.menuResult;
    }
}

「非静的メソッドgameStart()への静的参照を作成できません」というエラーが発生し続けます。簡単なものが欠けていると思いますが、見つかりません。ありがとう!

4

7 に答える 7

8

インスタンスメソッドは静的メソッドではないため、Startクラスのインスタンスを作成し、そのインスタンスでメソッドを呼び出す必要があります。gameStart()gameStart()

 public void main(String args[]) {
       new Start().gameStart();
       ..................
  }

クラス名をperfixとして使用すると、静的メソッドにのみアクセスできます。

于 2012-10-11T14:15:08.370 に答える
3
public int gameStart() <--- Instance method not static method

インスタンスで呼び出す

 Start start = new Start();
 start.gameStart();

したがって、最終的にクラスは次のようになります。

public static void main(String args[]) {
    Start start = new Start();
    start.gameStart();
    System.out.println(start.getMenuResult());
}

public class Start {
   private int menuResult = 3;
    public int gameStart() {
        return this.menuResult;//Don't know why there are two methods
    }
    public int getMenuResult() {
        return this.menuResult;
    }
}
于 2012-10-11T14:15:24.967 に答える
2

まず第一に、主な方法は

public static void main(String args[]) {

}

複数のゲームを作成できると思います。したがって、複数のインスタンスを開始できるはずなので、作成できる非静的クラスを作成してから、アクションを実行する必要があります。

元の質問に答えるには、静的ゲッターとセッターを持つ静的変数が必要です。

public class Start {
    private static int menuResult = 3;
    public static int gameStart() 
    {
        return menuResult;
    }
    public static int getMenuResult()
    {
        return Start.menuResult;
    }
于 2012-10-11T14:18:22.717 に答える
0

メソッドを静的にする必要がある場合は、関数定義にキーワードstaticを追加するだけです。それはエラーを取り除くでしょう。ただし、クラスStartをそのままにしておきたい場合は、main関数でStartのインスタンスを作成してから、メソッドを呼び出す必要があります。お役に立てば幸いです。

于 2012-10-11T14:17:37.590 に答える
0

クラス名でメソッドを呼び出そうとしています。新しいオブジェクトを作成し、そのメソッドを呼び出す必要があります

public void main(String args[]) {
        new Start().gameStart();
        System.out.println(menuResult);
    }
于 2012-10-11T14:23:01.230 に答える
0

Start.gameStart()public static int gameStart()Startはクラスであり、オブジェクトのインスタンスではないため、メソッドを参照します。

オブジェクトでメソッドを宣言する場合は、そのクラスではなく、オブジェクトのインスタンスにメソッドを適用する必要があります。

静的またはインスタンス化されたメソッドをいつ使用するのですか?

  • instanciated:現在のオブジェクトにメソッドを適用する必要があるときはいつでも。例:mycake.cook();
  • static:メソッド内で実行するアクションが特にオブジェクトとは関係がない場合。例 :Cake.throwThemAll();

mycakeはCakeのインスタンスであり、次のように宣言されています。Cake mycake = new Cake();

Cakeは、オブジェクトを表すクラスです。

オブジェクト、クラス、インスタンスについてまだ疑問がある場合は、オブジェクト指向プログラミングコースを読んでおく必要があります。

于 2012-10-11T14:25:12.470 に答える
0

他の答えは正しいですが、それはなぜクラス名からインスタンスメソッドに直接アクセスできないのかという質問のままです。Javaではすべての静的(メソッド、フィールド)がクラス名でバインドされ、クラスがメモリ(スタック)にロードされるとすべて静的になりますメンバーはスタックにロードされており、今回はインスタンスメソッドはクラスに表示されません。インスタンスメソッドはメモリ内のヒープ部分にロードされ、オブジェクト参照によってのみアクセスできます。

于 2012-10-11T14:33:05.847 に答える