2

私はまだJavaを初めて使用し、内部クラスを作成してmain内のメソッドを呼び出そうとしました。しかし、「静的変数ではありません-これは静的コンテキストから参照できません」というコンパイルエラーがあります

助けてください

class Class1{

    public static void main(String args []){
        Class2 myObject = new Class2();
        myObject.newMethod();
    }

    public class Class2{
        public void newMethod(){
            System.out.println("Second class");
        }
    }
}
4

4 に答える 4

11

内部クラスを構築するには、外部クラスのインスタンスへの参照が必要です。クラスが論理的にそれを必要としない場合は、staticmodiferを使用して「ネストされたクラス」にします。

public static class Class2 {
    public void newMethod(){
        System.out.println("Second class");
    }
}

編集:内部Class2クラスとしてのインスタンスを作成するには、次のようなものを使用できます。

Class1 outer = new Class1();
Class2 myObject = outer.new Class2();

またはもっと簡単に:

Class2 myObject = new Class1().new Class2();

...ただし、囲んでいるインスタンスへの参照が本当に必要な場合を除いて、クラスをネストされたクラスにする方がはるかに簡単です。

于 2012-10-16T11:31:34.187 に答える
1

次のような静的キーワードを追加して、内部クラスを静的にします。

public static class  Class2

その後、それは動作するはずです。非静的コンテキストでは、クラスごとのものである静的なものを要求することはできません。または、class2を静的なものにせずにオブジェクトを作成してアクセスすることもできます。

于 2012-10-16T11:32:56.747 に答える
1

内部クラスには、クラスの他の通常のメソッドにアクセスするのと同じようにアクセスします。

したがって、instanceメソッドにアクセスするためにクラスのへの参照が必要なのと同じように、同様に、内部クラスをインスタンス化するために、外部クラスのインスタンスへの参照が必要です。

Class1.Class2 myObject = new Class1().new Class2();

または、別の方法として、内部クラスを作成できます。staticこの場合、それはと呼ばれ、nested class元の方法を使用できます。-

public static class Class2{
    public void newMethod(){
        System.out.println("Second class");
    }
}
于 2012-10-16T11:33:00.927 に答える
1

Javaの初心者の場合は、次の例がさらに役立つ場合があります。

  1. 「main()」は、複雑なロジックには適していません。クラス内で静的でないメソッドをそこから呼び出すことはできません。「main()」は、アプリケーションの開始にのみ必要です。

  2. 多くの場合、まず最初に、メソッド「main」を含むクラスのインスタンスを作成する必要があります。例では「OuterClass」です。

  3. 「OuterClass」のインスタンスが存在する場合、InnerClassオブジェクトのInnerClassメソッドのように、そこから動的なものを呼び出すのに問題はありません。

次に例を示します。

public class OuterClass {
    public static void main(String args []){
        new OuterClass();   // Instance of First class
    }

    public OuterClass () { // constuctor
        InnerClass myObject = new InnerClass();
        myObject.newMethod();
    }

    public class InnerClass{
        public void newMethod(){
            System.out.println("Second class");
        }
    }

}
于 2012-10-16T12:29:57.117 に答える