gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:43:29 25 4
gpt4 key购买 nike

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

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

ma​​in 方法运行,并且它是构造任何类的方法,甚至是包含该类的方法。

然后,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 书做得更好,所以这里是:

A static nested class is simply a class that's a static member of the enclosing class

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

  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() 方法中的上述代码将继续工作。

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

The class itself isn't really "static"; there's no such thing as a static class. The static modifier in this case says that the nested class is a static member of the outer class. That means it can be accessed, as with other static members, without having an instance of the outer class.

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

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

关于java - 为什么我可以在 main 内部使用外部非静态类和方法,而不能使用类内部定义的类和方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18884706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com