我还是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");
}
}
}
答案 0 :(得分:10)
inner 类需要引用外部类的实例才能构造。如果你的类在逻辑上不需要它,那么使用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();
...但除非你真的希望引用一个封闭的实例,否则让这个类只是一个嵌套类要简单得多。
答案 1 :(得分:1)
通过添加静态关键字(如
)使内部类成为静态public static class Class2
然后它应该工作。在非静态上下文中,您不能要求任何静态的东西。或者,您可以通过创建对象来访问它,而不必将class2作为静态对象。
答案 2 :(得分:1)
访问内部类就像访问类的任何其他常规方法一样。
因此,就像你需要引用类的instance
来访问它的方法一样,你需要引用外部类的实例来实例化你的内部类: -
Class1.Class2 myObject = new Class1().new Class2();
或者,替代,您可以创建内部类static
,在这种情况下称为nested class
,然后您可以使用原始方式: -
public static class Class2{
public void newMethod(){
System.out.println("Second class");
}
}
答案 3 :(得分:1)
如果您是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");
}
}
}