首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

学习JVM原理-14.种装载时的Initialization并不总会执行

2012-10-21 
学习JVM原理-14.类装载时的Initialization并不总会执行摘自《深入理解Java虚拟机》周志明著代码里出现类名,

学习JVM原理-14.类装载时的Initialization并不总会执行
摘自《深入理解Java虚拟机》周志明著

代码里出现类名,未必就会初始化这个类.
不太严谨地说,只有你"用到"这个类时,类才会Initialize. 如果你只是点它的名,或者用的是它的父类,是不会Initialize的

直接看例子:

class Bean {public static int beanValue = 123;static{System.out.println("Bean inited");}}main(){  new Bean(); // 会打印"Bean inited" }main(){  int  i = Bean.beanValue;; // 会打印"Bean inited" }main(){  Class b = Bean.class; // 不会打印"Bean inited" }




再看下继承的情况


class SubBean extends Bean{static {System.out.println("SubBean inited");}public static int subBeanValue = 456;}main(){  int  i = SubBean.beanValue; /*打印的是"Bean inited" ,而不是"SubBean inited",因为beanVaue是属于Bean的*//*不过,SubBean仍会被装载,可以通过-XX:+TraceClassLoading证明这一点 */}

热点排行