0

私は自分の課題をやっていますが、いくつかのエラーが発生しました。あるクラスには、次のメソッドがあります。

public class Class1{
    public static boolean winningRecord(){
        final int WINNING_RECORD;
        return Class2.getPoints() > WINNING_RECORD;
    }
}

class Class2{
    int wins = 0;
    public int getPoints(){
        return wins; //More to it but to keep it simple I'll leave that out
    }
}

「非静的メソッドは静的コンテキストから参照できません...」というエラーが表示されるので、 getPoints() を静的メソッドにし、変数も静的にしましたが、機能します。しかし、オブジェクトを出力する別の方法では機能しません (static キーワードが原因だと思います)。

だから私の質問は、2番目のクラスのインスタンスを作成せずにメソッドを呼び出す方法はありますか? これは私が持っている一般的なコードです。何が起こっているのかを理解できるはずです。そうでない場合は、さらに追加します。

4

3 に答える 3

21

Java の重要な概念は、インスタンス化の考え方です。クラス定義には、1 つのタイプのオブジェクトに対するすべての規則が含まれています。オブジェクトの各インスタンスは同じルールに従います。たとえば、私が定義した場合

class Ball {
  public void bounce() { 
    // lots of code here
  }
}

次に、システムにはBalls と呼ばれるもののコードがあります。bounce

ボールが2つ欲しいなら…

public class Main {
  public static void main(String args[]) {
    Ball beachBall = new Ball();
    Ball soccerBall = new Ball();

そして、私はそれらをすべて跳ね返すことができます

    beachBall.bounce();
    beachBall.bounce();
    soccerBall.bounce();
    beachBall.bounce();

しかし、私は言うことができません

    Ball.bounce();

それは私のシステムに「どのボール?」という質問を残すからです。

staticメソッドと変数は特定のインスタンスに関連付けられていません。

例えば:

class Werewolf {
  static boolean fullMoon = false;

  static void setFullMoon(boolean isVisible) {
    fullMoon = isVisible;
    // code code code
  }

  void eatPerson(Person p) {
    // code code code
  }
}

静的メソッドはすべての人狼に適用されるため、クラスで呼び出されます。

Werewolf.fullMoon(true);

インスタンスで呼び出されるように、特定の狼男に適用される非静的 (インスタンス) メソッド。

jeff.eatPerson(chuck);

ジェフは人狼です。チャックは彼が食べる人です。残酷なコメントは無視してください。私たちは皆どこかから始めました。

于 2013-01-28T17:30:28.727 に答える
0

コードでは、静的キーワークのためwinningRecord()、はクラス自体に固有です。Class1

一方getPoints()、Class2では、クラスのインスタンスに固有ですClass2

静的コンテキストから非静的メソッドにアクセスすることはできません。

于 2013-01-28T18:19:41.393 に答える