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

时间:2012-04-17 17:00:12

标签: java static instance inner-classes

我已经使用.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()
        {

        }
    }
}

5 个答案:

答案 0 :(得分:2)

ProcessorLab的内部班级吗? (是的,既然您已经发布了您的代码,我的怀疑得到了证实)。

在Java中,nonstatic inner classes contain an implicit reference to the containing object of the outer class,因此无法从静态上下文(来自main方法)实例化它们。

所以

  • 创建Lab的实例(例如myLab),然后调用myLab.new Processor()
  • 声明Processor静态(如您所做)或
  • Processor变成顶级课程。

答案 1 :(得分: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
  }

}

答案 2 :(得分:0)

你应该从main调用一个构造函数:

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

将实例化放在构造函数中。

答案 3 :(得分:0)

  

但我不想让我的所有课程都是静态的。

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

答案 4 :(得分:0)

您的流程类是实验室类的内部类,在实例化实验室类的实例之前,不能创建流程类的实例,除非该内部类是静态的或类似的东西。

Main将在你的实验课上运行,因为它是静态的,但是当你试图创建私有内部类的实例时,你不能因为这个类是Lab的“私有内部”类,你不要没有实验室实例,所以你不能直接引用它。

您可以尝试使您的处理器类保持静态,或至少公开,或者更好,但您可以首先实例化实验室类的实例,并通过实例化实验室类引用处理器类的创建。