繁体   English   中英

Java 中的内部类 - 非 static 变量错误

[英]Inner classes in Java - Non static variable error

我还是 Java 的新手,我尝试创建一个内部 class 并调用 main. 有一个编译错误说

非 static 变量 - 这不能从 static 上下文中引用

请帮忙

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修饰符使其“只是一个嵌套类”:

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();

...但除非你真的想要一个封闭实例的引用,否则让这个类只是一个嵌套类要简单得多。

通过添加 static 关键字使内部类成为静态的

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");
        }
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM