JAVA中类的加载顺序

有规律的,你这还不算复杂,如果包含父类以及内部类(非静态)就更复查,但是万变不离其宗。

规律一、初始化构造时,先父后子;只有在父类所有都构造完后子类才被初始化

规律二、类加载先是静态、后非静态、最后是构造函数

静态构造块、静态类属性按出现在类定义里面的先后顺序初始化,同理非静态的也是一样的,只是静态的只在加载字节码是执行一次,不管你new多少次,非静态会在new多少次就执行多少次

规律三、java中的类只有在被用到的时候才会被加载

规律四、java类只有在类字节码被加载后才可以被构造成对象实例

上面四条规律就解析你上面不能理解代码执行结果的原因了

--- 共有 3 条评论 ---
  • xdev回复 @Archer2ee : 非静态是在new申请内存空间并初始化其值。java类是必须先加载字节码,然后通过new(有些不需要new,比如枚举和字符串,可以看jvm规范说明)根据字节码信息申请类的内存空间。上面的四种规律都是java虚拟机的规范严格规定的,只有实现规范的虚拟机才可以叫java虚拟机,所以ibm、oracle的虚拟机都符合上面四个规律。 (5个月前)  
  • xdev回复 @Archer2ee : 哈哈,确实,这个地方没有说的详细,类初始化化是分,静态,和非静态,静态是在类的字节码加载到jvm时,仅且只执行一次,按照先父后子,父子静态都初始化完后,跟据需要再初始化父子非静态部分(也就是说静态和非静态是分开的,但往往因为new的时候类即加载类同时也申请内存空间,可以先通过类名加静态方法或者静态属性代码调用来分开两个过程)。 (5个月前)  回复
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值