首页 > 代码库 > static inner class 什么时候被加载
static inner class 什么时候被加载
一直认为在加载outer class 的同时也会加载inner class 并且完成静态变量和代码块的初始化,今天在维基百科上面看到 “The static class definitionLazyHolder within it is not initialized until the JVM determines that LazyHolder must be executed”,颠覆了我之前的观点,于是做下列实验来证明一下:
public class Initialize { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub helper h = new helper(); } } class helper{ static { System.out.println("helper is on going"); } private static class holder{ static { System.out.println("hodler is on going"); } } holder returnh(){ return new holder(); } }
执行的结果为:
helper is on going
也就是说只加载了helper 这个outer class 并初始化了静态块,而holder并没有被加载
public class Initialize { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub helper h = new helper(); h.returnh(); } } class helper{ static { System.out.println("helper is on going"); } private static class holder{ static { System.out.println("hodler is on going"); } } holder returnh(){ return new holder(); } }
执行结果为:
helper is on going
hodler is on going
也就是说inner static class 和 outer static class 的加载时机是一样的:
1. 访问静态类中的静态字段
2. 访问静态类中的静态方法
3. new 静态类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。