我自然可以在任何类中都有类,所以在我的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 在AnotherClass
和method
定义中首先运行?
我试着用我自己的话来写这个,但 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()
、AnotherClass
和method()
都是HolaMundo
的静态成员,那么是的,这意味着它们都"一起运行"。更具体地说,它们是在 JVM 首次加载类时(即在类加载时)加载的。
在 Java 中,非静态嵌套类具有对容器类实例的隐式引用,因此不能在静态上下文(如 main 方法)中使用,因为没有要引用的实例。