Java中的内部类 – 非静态变量错误
我还是java的新手,我试图创建一个内部类并在main中调用该方法。 但是有一个编译错误,说“非静态变量 – 这不能从静态上下文中引用”
请帮忙
class Class1{ public static void main(String args []){ Class2 myObject = new Class2(); myObject.newMethod(); } public class Class2{ public void newMethod(){ System.out.println("Second class"); } } }
内部类需要引用外部类的实例才能构造。 如果你的类在逻辑上不需要它,那么使用static
modifer使它“只是一个嵌套类”:
public static class Class2 { public void newMethod(){ System.out.println("Second class"); } }
编辑:要创建Class2
的实例作为内部类,您可以使用类似的东西:
Class1 outer = new Class1(); Class2 myObject = outer.new Class2();
或者更简单地说:
Class2 myObject = new Class1().new Class2();
…但除非你真的想要一个封闭实例的引用,否则使类只是一个嵌套类要简单得多。
通过添加静态关键字来使内部类变为静态
public static class Class2
那它应该工作。 在非静态上下文中,你不能问每个类的东西是静态的。 或者,您可以通过创建对象来访问它,而不将class2作为静态对象。
访问内部类就像访问类的任何其他常规方法一样。
因此,就像您需要引用类的instance
来访问其方法一样,类似地,您需要引用外部类的实例,以实例化您的内部类:
Class1.Class2 myObject = new Class1().new Class2();
或者, 另一种方法是,你可以使你的内部类static
,在这种情况下它被称为nested class
,然后你可以使用你原来的方式: –
public static class Class2{ public void newMethod(){ System.out.println("Second class"); } }
如果您是Java的新手,下一个示例可能对您有所帮助。
-
“main()”不适用于任何复杂的逻辑。 您无法从中调用任何在类中不是静态的方法。 “main()”仅用于启动应用程序,
-
在许多情况下,首先你需要创建类的实例,其中包含方法“main”。 例如,它是“OuterClass”。
-
当“OuterClass”的实例存在时,你可以从它调用任何动态的东西,比如InnerClass对象的InnerClass方法。
这是一个例子:
public class OuterClass { public static void main(String args []){ new OuterClass(); // Instance of First class } public OuterClass () { // constuctor InnerClass myObject = new InnerClass(); myObject.newMethod(); } public class InnerClass{ public void newMethod(){ System.out.println("Second class"); } } }