扫码关注官方订阅号
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
在运行 java 程序的时候,每个类只被加载一次。不可能重复加载的。所以也就不存在题主说的递归了。
是不是把类加载和对象初始化搞混了?
楼主是不是想的太高深了?实例化和声明定义是2个概念和阶段。A2有几个静态的成员变量在声明时实例化,而类的实例化过程是通过构造函数完成的。这里看上去出现了嵌套,其实不然。编译器可以在编译实例化语句的时候申明指令跳转,跳转地址在二次编译的时候确定。这样,类申明阶段,在实例化a,b,c,d的时候编译程序会跳转到A2(int i)的构造方法程序块。在类实例化阶段的时候跳转到A()构造方法。说白了就是在不同阶段调用对应的构造方法而已,没有楼主以为的循环嵌套。
类加载时,对于静态变量和构造方法的加载顺序不一样吧。构造方法本质也是静态方法。也不怎么懂,先占个板凳
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
在运行 java 程序的时候,每个类只被加载一次。不可能重复加载的。所以也就不存在题主说的递归了。
是不是把类加载和对象初始化搞混了?
楼主是不是想的太高深了?实例化和声明定义是2个概念和阶段。
A2有几个静态的成员变量在声明时实例化,而类的实例化过程是通过构造函数完成的。
这里看上去出现了嵌套,其实不然。编译器可以在编译实例化语句的时候申明指令跳转,跳转地址在二次编译的时候确定。
这样,类申明阶段,在实例化a,b,c,d的时候编译程序会跳转到A2(int i)的构造方法程序块。
在类实例化阶段的时候跳转到A()构造方法。
说白了就是在不同阶段调用对应的构造方法而已,没有楼主以为的循环嵌套。
类加载时,对于静态变量和构造方法的加载顺序不一样吧。构造方法本质也是静态方法。
也不怎么懂,先占个板凳