类是如何被加载及初始化的

划重点:

1.static所定义的对象只会被初始化一次;

2.static初始化发生之处,同时也是类初次使用之处;

3.类只有在初次被使用时才加载;

4.所有static对象及static代码段会在加载时依程序中书写顺序依次初始化。

接下来,我们写一个Demo,验证一下:

首先,创建一个父类Clothes


然后,创建Jacket类,继承于Clothes


从代码可以看出,线程启动,首先会访问执行Jacket类中static修饰的main方法,于是加载器开始启动,并寻找加载Jacket.class,在这一过程中,编译器会发现它有一个父类,也称基类。如果Clothes还有父的话,编译器会继续向上找,因为导出类(子类)的static初始化可能会依赖于基类中成员是否会被正确初始化。

自根基开始向下扩散加载完成后,就可以创建对象了。

对象中所有基本类型成员被赋予默认值,对象成员引用被指向为null,然后基类构造器被调用,类似于上述加载顺序,实例变量被逐步初始化。

从执行结果来看,确实如此。

大家可能会发现,通常在没有主线程作为入口的类中,在调用构造器的时候,就完成了类的加载;这是因为构造器本身就是一个含有隐式static的方法,所以文章开头的说法是没错的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容