![](/img/trans.png)
[英]Java outer and inner classes have method with the same name: non-static method static context error
[英]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 新手,下一个示例可能对您也有帮助。
“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");
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.