Java-使用静态方法中的实例类?

Java-使用静态方法中的实例类?,java,static,instance,inner-classes,Java,Static,Instance,Inner Classes,我多年来一直在使用.NET编程,我正在通过一些简单的入门程序深入Java 不过我有点麻烦 当我使用public void main创建启动类时,编译器不允许我实例化我编写的任何类 我得到的错误是“非静态变量_processor不能从静态上下文引用”,其中_processor是我试图从我编写的processor类实例化的对象 当我将处理器更改为静态类时,程序将编译并运行良好,但我不想让所有类都是静态的 有办法吗 提前谢谢 这是我写的所有东西。它不会在当前状态下编译: class Lab {

我多年来一直在使用.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()
        {

        }
    }
}

Processor
Lab
的内部类吗?(是的,现在你发布了你的代码,我的怀疑得到了证实)

在Java中,它们不能从静态上下文(从
main
方法)实例化

所以

  • 创建
    Lab
    (例如
    myLab
    )的实例,然后调用
    myLab.new Processor()
    ,或者
  • 声明
    处理器
    静态(如您所做),或
  • 处理器
    转换为顶级类

您应该从main调用构造函数:

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

然后将您的实例化放在构造函数中。

这是您的问题吗

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
  }

}
但是我不想让我所有的类都是静态的


根据我的经验,Java中的大多数内部类都是静态的。如果可以在单独的文件中编写内部类(它不直接使用包含类的成员),则应将其定义为静态。Java允许您在其他类中编写内部静态类,这只是为了方便起见。

您的流程类是实验室类的内部类,在实例化实验室类的实例之前,您无法创建流程类的实例,除非该内部类是静态的或其他的

Main将在您的实验室类中运行,因为它是静态的,但是当您尝试创建私有内部类的实例时,您不能这样做,因为该类是实验室的“私有内部”类,并且您没有实验室实例,所以您不能直接引用它


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

如果您向我们展示代码,这会有所帮助。将代码放在此处将有助于更好地理解问题。这不是您编写的全部内容-错误消息指的是
\u processor
,但您展示的代码中不会出现这种情况。