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

时间:2013-09-19 01:01:04

标签: java static main

我自然可以在任何类中拥有类,所以在我的 main 方法中。我也可以访问它的方法及其属性。

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

主要方法运行,是构建任何类的人,即使是包含它的人。

然后,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定义中首先运行了吗?

2 个答案:

答案 0 :(得分: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.方法中的上述代码将继续有效。

如果你感到困惑,这本书的内容更多:

  

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

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

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

答案 1 :(得分:1)

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