-3

重複の可能性:
java : 非静的変数は静的コンテキスト エラーから参照できません

私の目的は、クライアント サーバー チャット用のプログラムを作成することです。サーバー用に次のコードhttps://github.com/jinujd/Java-networking/blob/master/Server.javaを作成し ました。コンパイル後、次のエラーが発生しました。 .

非静的変数。これは静的コンテキストから参照できません。そこに何が問題なのですか?私のもう一つの疑問は、

/*A.java*/
class A {
    String a;
    class B {
    }
    public static void main() {
    }
}

変数は B と main() にアクセスできますか?

4

3 に答える 3

2

Static functions/variablesnon-staticクラス変数( )が関連付けられている間、クラス定義自体に関連付けられてclass instanceいます。つまり、通常、クラスからオブジェクトをインスタンス化するときに初期化されます。

Static functions/variablesクラスインスタンスなしで次のように使用できます。

        A.main();

non-static関数/変数にアクセスするには、最初にオブジェクト インスタンスを作成する必要があります

        A a = new A();
        a.getA();

staticスコープは階層内 (定義レベル) にあるため、インスタンス レベルのメソッド/変数が表示されないため、文句を言います。しかし、逆でも構いません。つまり、非静的メソッドから静的メソッド/変数にアクセスできる必要があります。

理由を説明したので、クラス/メソッド/変数のスコープを自分で修正できると思います。

于 2012-11-04T15:11:21.190 に答える
1

あなたが必要

static class ClientReceiver extends Thread {

いいえ

class ClientReceiver extends Thread {
于 2012-11-04T15:12:43.473 に答える
1

non-static variable this cannot be referenced from a static context. What is the problem there?

静的コンテキストから非静的データにアクセスするには、クラスのインスタンスが必要です。

    public class Sample {
     String var="nonstatic variable";
    public static void main(String...args){
      Sample s= new sample();
      system.out.println(s.var);

}

} 

クラス B は文字列 a に直接アクセスできますが、静的メイン メソッドはクラス A のインスタンスにアクセスする必要があります。

于 2012-11-04T15:13:08.900 に答える