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的新手,下一个示例可能对您有所帮助。

  1. “main()”不适用于任何复杂的逻辑。 您无法从中调用任何在类中不是静态的方法。 “main()”仅用于启动应用程序,

  2. 在许多情况下,首先你需要创建类的实例,其中包含方法“main”。 例如,它是“OuterClass”。

  3. 当“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"); } } }