package my.test.jvm;
public class testJVM2 {
void print1(A2 a){
System.out.println("void print1: ");
}
static void print2(A2 a){
System.out.println("static void print2: ");
}
public static void main(String[] args) {
// A2 src;
A2 src=new A2();
// new testJVM2().print1(src);
}
}
class A2{
//public A2 e=new A2(5);stack overflow error
public static A2 d=new A2(4);
public static final A2 a=new A2(1);
public static final A2 b=new A2(2);
public static final A2 c=new A2(3);
A2(){
System.out.println("constructor A2: ()");
}
A2(int i){
System.out.println("constructor A2: "+i);
}
}
我这么描述一下问题吧:编译运行这个文件,首先进入main函数,new A2()的时候进入A2的类加载过程,前几步忽略,在最后一部类初始化过程中,排除abc(因为它们在准备阶段完成进入常量池),讨论d的话,d的语句走到new A2(4)的时候,此时A2类的类加载过程尚未完成(因为最后一步尚在进行之中),那么这时是否会启动一个新的类加载过程?如果未启动,那这个过程又是如何进行的?
在运行 java 程序的时候,每个类只被加载一次。不可能重复加载的。所以也就不存在题主说的递归了。