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 静态类

static inner class 什么时候被加载,布布扣,bubuko.com

时间: 2024-11-08 23:19:56

static inner class 什么时候被加载的相关文章

log4j默认加载的配置文件

通过查看log4j源码,版本1.2.16,log4j包 去默认的位置加载 配置文件: 文件名如下: static public final String DEFAULT_CONFIGURATION_FILE = "log4j.properties"; static final String DEFAULT_XML_CONFIGURATION_FILE = "log4j.xml"; 加载配置的过程: LogManager 的 static 代码段: if(config

cocos2d-x 3.3 之卡牌设计 NO.6 Loading界面(异步加载图片,plist)

刚开始做卡牌的时候没有想到要做loading,因为小游戏资源不多. 但是后来不断的加图片,直到在真机上发现卡顿的问题,我才知道该需要加loading了...... 首先,我们先定义类: class Loading : public Layer { public: bool init(); CREATE_FUNC( Loading); static Scene* CreateScene(); int total_pic_num;//需加载图片数 int total_sound_num;//需加载声

从头认识java-6.7 初始化与类的加载

这一章节我们来讨论一下初始化与类的加载. 简单的说,类是在static成员被访问的时候加载的. 我们下面举一个比较复杂的例子,然后解释一下加载和初始化的顺序. package com.ray.ch06; public class Sub extends Father { private int b = print("b");// 5 private static int c = print("c");// 1 public Sub() { System.out.pr

Clr Via C#读书笔记---程序集的加载和反射

#1 加载程序集 Assembly.Load: public class Assembly { public static Assembly Load(AssemblyName assemblyRef); public static Assembly Load(String assemblyString); } 在内部,Load导致CLR向应用程序集应用一个版本绑定重定向策略,并在GAC中查找程序集.如果传递的是一个弱命名程序集,不会应用版本绑定重定向策略,也不会去GAC中查找程序集. AppD

java 中类的加载顺序

1.虚拟机在首次加载Java类时,会对静态初始化块.静态成员变量.静态方法进行一次初始化 2.只有在调用new方法时才会创建类的实例 3.类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始化块部分,然后是父类的构造方法:再执行本类继承的子类的初始化块,最后是子类的构造方法 4.类实例销毁时候,首先销毁子类部分,再销毁父类部分 public class Parent { public static int t = parentStaticMethod2(); { System.out.

World Wind Java开发之十五——加载三维模型

之前的一篇博客是关于加载粗三维模型的,见http://blog.csdn.net/giser_whu/article/details/43452703,这个地方还存在着不能加载纹理的问题,一直没呢解决.那么WW如何加载常用的三维模型格式(3ds.obj.skp)呢,通过一番搜索,了解到WW可以加载collada的dae格式的三维模型,并且还可以加载kml\kmz文件,那么WW加载三维模型的方法就出来了:首先将其他格式三维模型转换为kmz或kml文件,再加载.这里我是从su的三维模型库中下载的sk

【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息]个人网站已经上线运行,后面博客以及技术干货等精彩文章会同步更新,请大家关注收藏:http://www.lcode.org 话说RecyclerView已经面市很久,也在很多应用中得到广泛的使用,在整个开发者圈子里面也拥有很不错的口碑,那说明RecyclerView拥有比ListView,GridVi

Java类中的各种成员的加载顺序

源代码: [java] view plain copy public class SuperAndSub { public static void main(String[] args) { // Super s1 = new Sub(); // Super s2 = new Super(); Sub s3 = new Sub(); } } class Super { static int a = getA(); static { System.out.println("加载Super的静态块&

Android4.4 Telephony流程分析——联系人(Contact)列表缩略图的加载过程

本文代码以MTK平台Android 4.4.2为分析对象,与Google原生AOSP有些许差异,请读者知悉. Android联系人列表的缩略图加载主要用到ContactPhotoManager.java这个类,这是个抽象类,实现了ComponentCallbacks2接口,其内部有个它的具体实现类,叫ContactPhotoManagerImpl,ContactPhotoManagerImpl继承了ContactPhotoManager并实现了android.os.Handler.Callbac