首页 > 解决方案 > 主类中使用的每个类都必须是静态的吗?

问题描述

我是java的菜鸟,但是在练习时我突然想到,使用OOP设计,主类中的每个类都必须是静态的,对吗?在这段代码中,我无法在 main 中调用非静态的类(ShinyMetal)。似乎我可能错过了为什么你会声明一个静态类的一些观点。谢谢你的帮助!

public class Solution {

  public class ShinyMetal {

  }

  public static void main(String[] args) {
    ShinyMetal abcd = new ShinyMetal(); // error cannot be referenced from static context
    System.out.println(abcd.toString());
  }
}

标签: javaclasserror-handlingstaticmain

解决方案


由于您的类是非静态嵌套类,因此它包含对其父类的引用(在本例中Solution)。

因此,为了实例化ShinyMetal你需要一个父实例(即Solution)。

为了克服这个问题,您需要声明ShinyMetal为静态或实例化Solution然后访问它。

我建议你看看这里的文档,它很好地解释了所有这些:

https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html


推荐阅读