Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
187 views
in Technique[技术] by (71.8m points)

java类加载机制-类定义中new如何理解

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类的类加载过程尚未完成(因为最后一步尚在进行之中),那么这时是否会启动一个新的类加载过程?如果未启动,那这个过程又是如何进行的?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

在运行 java 程序的时候,每个类只被加载一次。不可能重复加载的。所以也就不存在题主说的递归了。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...