1

私は何年も .NET を使用してプログラミングを行ってきましたが、いくつかの単純なスターター プログラムを使用して Java に飛び込んでいます。

ちょっと面倒だけど…

でスタートアップ クラスを作成するとpublic void main、コンパイラで、作成したクラスをインスタンス化できません。

私が得ているエラーは、「非静的変数 _processor は静的コンテキストから参照できません」です。_processor は、作成した Processor クラスからインスタンス化しようとしているオブジェクトです。

Processor を静的クラスに変更すると、プログラムは正常にコンパイルおよび実行されますが、すべてのクラスを静的にする必要はありません。

これを回避する方法はありますか?

前もって感謝します!

これが私が書いたすべてです。現在の状態ではコンパイルされません:

class Lab
{
    public static void main(String[] args)
    {
        Processor proc = new Processor();

        proc.Go();
    }

    private class Processor
    {
        private Random _rand = new Random();

        public void Processor() {}

        public void Go()
        {

        }
    }
}
4

5 に答える 5

2

もしかしてのProcessorインナークラス?Lab(はい、コードを公開したので、私の疑いが確認されました)。

Java では、非静的内部クラスには外部クラスの包含オブジェクトへの暗黙的な参照が含まれているため、静的コンテキストから (メソッドから) インスタンス化することはできませんmain

そう

  • Lab(例: )のインスタンスを作成してmyLabから を呼び出すmyLab.new Processor()か、または
  • Processorstatic を宣言する(あなたがしたように)、または
  • Processorトップクラスになります。
于 2012-04-17T17:03:46.400 に答える
1

もしかして、これはあなたの問題ですか?

public class DemoClass{

  String field;

  public static void main(String[] args){
    field = "Hey"; //forbidden - can't access instance field from static context
    DemoClass dc = new DemoClass();
    dc.field = "Hey"; //this is ok
  }

}
于 2012-04-17T17:06:59.087 に答える
0

main からコンストラクターを呼び出す必要があります。

public static void main(String[] args){
new MyClass();
}

そして、インスタンス化をコンストラクターに入れます。

于 2012-04-17T17:04:02.970 に答える
0

しかし、すべてのクラスを静的にする必要はありません。

私の経験では、Java のほとんどの内部クラスは静的です。別のファイルに内部クラスを記述できる場合 (それを含むクラスのメンバーを直接使用しない場合)、それを static として定義する必要があります。Java で他のクラス内に内部静的クラスを記述できるようになっているのは、実際には利便性のためだけです。

于 2012-04-17T17:10:07.503 に答える
0

プロセス クラスはラボ クラスの内部クラスです。その内部クラスが静的か何かでない限り、ラボ クラスのインスタンスをインスタンス化するまで、プロセス クラスのインスタンスを作成することはできません。

メインは静的であるため、ラボ クラスで実行されますが、プライベート 内部クラスのインスタンスを作成しようとすると、このクラスは Lab の「プライベート 内部」クラスであり、持っていないため作成できません。ラボ インスタンスであるため、直接参照することはできません。

プロセッサ クラスを静的にするか、少なくともパブリックにするか、ラボ クラスのインスタンスを最初にインスタンス化し、インスタンス化されたラボ クラスを介してプロセッサ クラスの作成を参照することができます。

于 2012-04-17T17:10:54.203 に答える