为什么我可以在 main 中使用外部非静态类和方法,而不能使用类内部定义的类和方法?



我自然可以在任何类中都有类,所以在我的main方法中。我还可以访问它的方法和属性。

但是这段代码不起作用。我知道主要要static,所以它是这样的:

main 方法运行,它是构造任何类的方法,甚至是包含它的类。

然后,main 应该启动,构造包含它的类,然后构造其中的任何类或方法。

package holamundo;

public class HolaMundo {

    public class AnotherClass {
        // Class body
    }
    public void method () {
        // Code
    }
    public static void main(String[] args) {
        AnotherClass a = new AnotherClass();
        method();
    }

这样做:

package holamundo;

public class HolaMundo {

    public static class AnotherClass {
        // Class body
    }
    public static void method () {
        // Code
    }
    public static void main(String[] args) {
        AnotherClass a = new AnotherClass();
        method();
    }

我们可以说 main 在AnotherClassmethod定义中首先运行?

我试着用我自己的话来写这个,但 SCJP 6 的书做得更好,所以它在这里:

静态嵌套类只是一个类,它是 封闭类

也许为了更好地理解,这里有一些代码:

  public class HolaMundo {
    public static class AnotherClass {
       public void hello(){
           System.out.println("Hello");
       }
       public static void hola(){
           System.out.println("Hola");
       }
    }
    public static void main(String[] args) {
        HolaMundo.AnotherClass.hola();
        HolaMundo.AnotherClass holaAnother = new HolaMundo.AnotherClass();
        holaAnother.hello();
    }
}

请注意,如果删除出现的HolaMundo.main()方法中的上述代码将继续工作。

如果你感到困惑,这里有更多来自书的内容:

类本身并不是真正的"静态";没有所谓的 静态类。在这种情况下,静态修饰符表示嵌套的 类是外部类的静态成员。这意味着它可以 与其他静态成员一样访问,没有 外部类。

static方法(如 main() )不属于(也无法访问)任何类的任何特定实例。这意味着静态方法可以创建它有权访问的任何类的新实例,即使它恰好是首先声明所述方法的类的实例。

现在,既然在这种情况下,main()AnotherClassmethod()都是HolaMundo的静态成员,那么是的,这意味着它们都"一起运行"。更具体地说,它们是在 JVM 首次加载类时(即在类加载时)加载的。

在 Java 中,非静态嵌套类具有对容器类实例的隐式引用,因此不能在静态上下文(如 main 方法)中使用,因为没有要引用的实例。

相关内容

  • 没有找到相关文章

最新更新