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