0

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

但是这段代码不起作用。我知道 main to be 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 在AnotherClassandmethod定义中首先运行?

4

2 回答 2

1

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

于 2013-09-19T02:39:35.313 回答
1

我试着用我自己的话来写这个,但是 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();

    }
}

请注意,main()如果删除HolaMundo..

如果您感到困惑,请参阅本书的更多内容:

类本身并不是真正的“静态”;没有静态类这样的东西。在这种情况下,静态修饰符表示嵌套类是外部类的静态成员。这意味着它可以像其他静态成员一样被访问,而无需外部类的实例。

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

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

于 2013-09-19T02:15:54.337 回答