补:Java中的类在什么情况下会被加载并初始化

会被加载和初始化的情况:

1.虚拟机启动时,会先初始化main方法所在的类;

2.new一个类的对象,创建类的实例的时候;

3.利用反射来强制创建某个类或接口对应的java.lang.Class对象;

4.初始化某个类的子类,子类的父类会先被初始化;

5.调用某个类的类方法(静态方法);???

6.访问某个类变量或为该变量赋值。

7.直接使用java.exe命令运行某个主类,主类先被初始化。 

注:static修饰的属性和方法在类加载的时候初始化,普通的属性和方法在创建类实例对象的时候才会被初始化。

 
不被初始化的情况: 

1.通过子类引用父类的静态字段,子类不会被初始化。 ?

2.调用类的常量;即访问常量(常量在link阶段就被放入常量池中了);

3.通过数组定义类引用,不会导致类的初始化;

TestClass[] testClassArr = new TestClass[5];    \\ 不会导致TestClass类被初始化


注:

          (1)本篇博客转载自:https://blog.csdn.net/guoqingshuang/article/details/87970688https://www.cnblogs.com/ryokai/p/13607643.htmlhttps://www.cnblogs.com/codezpc/p/12703440.html(这篇博客的最后一条存疑啦);

          (2)类装载、连接、初始化的内容,目前自己不能完全理解,留待后续深化!!!

猜你喜欢

转载自blog.csdn.net/csucsgoat/article/details/114815885