1

多年来我一直在使用 .NET 进行编程,并且我正在通过一些简单的入门程序投入到 Java 中。

不过我有点麻烦...

当我用 . 创建我的启动类时public void main,编译器不会让我实例化我编写的任何类?

我得到的错误是“非静态变量 _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(eg 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 中的大多数内部类都是静态的。如果您可以在单独的文件中编写内部类(它不直接使用包含类的成员),则应将其定义为静态。Java 允许您在其他类中编写内部静态类实际上只是为了方便。

于 2012-04-17T17:10:07.503 回答
0

您的流程类是您的实验室类的内部类,除非您实例化您的实验室类的实例,否则您无法创建流程类的实例,除非该内部类是静态的或其他东西。

Main 将在您的实验室类中运行,因为它是静态的,但是当您尝试创建私有内部类的实例时,您不能,因为该类是 Lab 的“私有内部”类,而您没有一个实验室实例,所以你不能直接引用它。

您可以尝试使您的处理器类成为静态的,或者至少是公共的,或者更好的是,您可以先实例化您的实验室类的实例,并通过您的实例化实验室类来引用处理器类的创建。

于 2012-04-17T17:10:54.203 回答