5

私はちょうど実験していて、ローリング コードを実行するとコンパイルされず、その理由がわかりません。

IDE に「非静的フィールド リストへの静的参照を作成できません」と表示されますが、これが何であるか、またはその理由がよくわかりません。また、それは他に何に適用されますか、つまり、プライベート変数やメソッドだけですか?その理由は?:

public class MyList {

    private List list;

    public static void main (String[] args) {
        list = new LinkedList();
        list.add("One");
        list.add("Two");
        System.out.println(list);
    }

}

ただし、次のように変更すると、機能します。

public class MyList {

    private List list;

    public static void main (String[] args) {
        new MyList().exct();
    }

    public void exct() {
        list = new LinkedList();
        list.add("One");
        list.add("Two");
        System.out.println(list);
    }

}
4

2 に答える 2

4

静的フィールドは、クラスのすべてのインスタンス間で共有されるフィールドです。
非静的/メンバーフィールドは、クラスのインスタンスに固有です。

例:

public class Car {
  static final int tireMax = 4;
  int tires;
}

ここでは、特定の車に任意の数のタイヤを装着できることは理にかなっていますが、最大数はすべての車で同じです。
変数を変更可能にした場合tireMax、値を変更すると、すべての車がより多くの(またはより少ない)タイヤを持つことができるようになります。

2番目の例が機能する理由listは、新しいMyListインスタンスを取得しているためです。最初のケースでは、特定のインスタンスのコンテキストではなく静的コンテキストにいるため、変数listにアクセスできません。

于 2012-04-17T23:48:34.507 に答える
0

最初の例では、静的コンテンツから非静的フィールドを呼び出していますが、これは不可能です。2 つ目では、そのフィールドにアクセスできる MyList オブジェクトで ext 関数を呼び出しています。

于 2012-04-17T23:46:41.807 に答える