什么时候类加载

什么时候类加载 。第一次需要使用类信息时加载。 

类加载的原则:延迟加载,能不加载就不加载。

触发类加载的几种情况: 

(1)、调用静态成员时,会加载静态成员真正所在的类及其父类。

通过子类调用父类的静态成员时,只会加载父类而不会加载子类

(2)、第一次 new 对象的时候 加载(第二次再 new 同一个类时,不需再加载)。

(3)、加载子类会先加载父类。(覆盖父类方法时所抛出的异常不能超过父类定义的范围) 

如果静态属性有 final 修饰时,则不会加载,当成常量使用

例:public static final int a =123; 

但是如果上面的等式右值改成表达式(且该表达式在编译时不能确定其值)时则会加载类。 

例:public static final int a = math.PI 

如果访问的是类的公开静态常量,那么如果编译器在编译的时候能确定这个常量的值,就不会被加载;

如果编译时不能确定其值的话,则运行时加载

posted @ 2018-12-03 18:34  uuhh  阅读(2123)  评论(0编辑  收藏  举报