1
package shubh;
class thread5
{
    static class a7 extends Thread
    {
        public void run()
        {
            for(int i=0;i<=10;i++)
            {
                System.out.println(i);
            }
        }
    }

    static class a8 implements Runnable
    {
        public void run()
        {
            for(int i=21;i<=30;i++)
            {
                System.out.println(i);
            }
        }
    }

    public static void main(String arg[])
    {
        a7 a=new a7();
        a.start();
        a8 b=new a8();
        Thread th=new Thread(b);
        th.start();
        for(int i=40;i<=50;i++)
        {
            System.out.println(i);
        }
    }
}

2つのネストされたクラスから静的キーワードを削除すると、エラーが発生します非静的変数は静的コンテキストから参照できません誰でもこのエラーの意味、またはネストされたクラスを静的として与える必要がある理由を説明できますか

4

4 に答える 4

6

削除するstaticと、内部クラスをインスタンス化するために実際のオブジェクトが必要になります。いえ
new thread5().new a7();

于 2012-12-26T20:33:41.843 に答える
1

非静的内部クラスは、クラスのインスタンス内でのみインスタンス化できます。次に例を示します。

thread5 t = new thread5();
a7 a = t.new a7();
于 2012-12-26T20:35:21.193 に答える
0

2 つのネストされたクラスから static キーワードを削除すると、非静的変数は静的コンテキストから参照できないというエラーが発生します

静的メソッドから非静的データ/メソッド/クラスに直接アクセスすることはできません。それらにアクセスするには、クラスのインスタンスが必要です。

クラス a7 の static を削除する場合は、次のように a7 インスタンスを作成する必要があります。

Threads5 td = new Threads5()';
a7 a=new td.new a7();
于 2012-12-26T20:34:22.797 に答える
0

This Javarevisited Articleで答えを見つけました

コンパイラ エラー「非静的変数は静的コンテキストから参照できません」の答えを見つける前に、静的の簡単な改訂を行いましょう。Java の静的変数はクラスに属し、その値はすべてのインスタンスで同じままです。一方、インスタンス変数はインスタンスごとに異なる値を持ち、new() 演算子または Class.newInstance() のようなリフレクションを使用してオブジェクトのインスタンスが作成されるときに作成されます。したがって、インスタンスなしで非静的変数にアクセスしようとすると、これらの変数はまだ作成されておらず、インスタンスが作成されてインスタンスに関連付けられるまで存在しないため、コンパイラは文句を言います。

要約すると、静的コンテキストのコードはクラスのインスタンスを作成しなくても実行できるため、まだ作成されていない特定のインスタンスの値を要求しても意味がありません。

于 2012-12-26T20:35:06.930 に答える