我已经使用.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()
{
}
}
}
答案 0 :(得分:2)
Processor
是Lab
的内部班级吗? (是的,既然您已经发布了您的代码,我的怀疑得到了证实)。
在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的“私有内部”类,你不要没有实验室实例,所以你不能直接引用它。
您可以尝试使您的处理器类保持静态,或至少公开,或者更好,但您可以首先实例化实验室类的实例,并通过实例化实验室类引用处理器类的创建。