JAVA类的初始化顺序依次是:(静态变量、静态初始化块)->(变量、初始化块)->构造函数,

相同级别的以定义顺序为准,  且静态变量和静态初始化块只初始化一次。通过下面的代码来验证。

publicclassClassA {

{

System.out.println("Init Block!!");

}

static{

System.out.println("Static Init Block!!");

}

privatestaticClassB sMemVariable =newClassB(

"Static Member Variable Inited!!");

publicClassA() {

System.out.println("Constructer execute!!");

}

publicClassB memVariable =newClassB("Member Variable Inited!!");

publicstaticvoidmain(String[] args) {

ClassA o =newClassA();

ClassA o2 =newClassA();

}

}

publicclassClassB {

publicClassB(String mes) {

System.out.println(mes);

}

publicstaticvoidmain(String[] args)throwsClassNotFoundException {

try{

Class.forName("test.ClassA");//(1)

}catch(Exception e) {

}

}

}

运行ClassA输出结果为:

Static Init Block!!

Static Member Variable Inited!!

Init Block!!

Member Variable Inited!!

Constructer execute!!

Init Block!!

Member Variable Inited!!

Constructer execute!!

静态变量和静态初始化块的初始化发生在类加载完成之后。验证如下:

运行ClassB输出结果为:

Static Init Block!!

Static Member Variable Inited!!

的确如此,但这个说法并不正确,如果ClassB代码(1)处改成:

Class.forName("test.ClassA", false,ClassB.class.getClassLoader());

再次运行,就看不到输出结果了。问题再于Class.forName的第二个参数(initialize)为false,

类加载之后不执行静态变量与静态块的初始化,而把这一工作放到第一次创建对像时完成。

Class.forName("test.ClassA")方法设为initialize为true(参考JDK源码);

修改(1)处代码为Class.forName("test.ClassA", false,ClassB.class.getClassLoader()).newInstance();

就看到输出结果了。

java 初始化参数_JAVA类的初始化顺序与initialize参数相关推荐

  1. java初始化实例化_java类的初始化和实例化区别

    结论: 参考https://blog.csdn.net/qq_43672627/article/details/86616624 类的初始化:是完成程序执行前的准备工作.在这个阶段,静态的(变量,方法 ...

  2. Java创建对象过程:类的初始化和实例化

    文章目录 前言 一.类的初始化 二.类的实例化 前言 Java对象的创建过程往往包括类初始化和类实例化两个阶段.类的初始化在前.类的实例化在后. 注意:这与spring的bean正好相反,spring ...

  3. java类的静态成员初始化_Java类的初始化顺序 (静态变量、静态初始化块、变量、初始......

    很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...

  4. java类初始化顺序_Java 类的初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用{}定义,每一次创建对象时执行 执行顺序优先级:静态块,main(),构造块,构造方法 1. 构造函数 publi ...

  5. java类编来那个初始化顺序_java类的初始化顺序

    对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: public ...

  6. java初始化实例化_Java 类初始化和实例化以及多态理解

    前言 本篇主要讲解了类的初始化.实例化.静态代码块.构造器.getClass().super.this 等相关的知识点,做一个总结. demo 老规矩,看代码: Father.java public ...

  7. java类初始化顺序_「漫画」Java中的父子类的执行顺序到底是怎么一回事?

    ----下课后---- 结论 类的加载顺序. (1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法) (2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 ) (3) ...

  8. java 接口初始化_Java类的初始化 | 学步园

    类的初始化时机1.创建类的实例 2.访问类或接口的静态变量(static final常量除外,static final变量可以)3.调用类的静态方法 4.反射(Class.forName(packag ...

  9. java 静态数据_Java 静态数据初始化的示例代码

    无论创建多少个对象,静态数据都只占用一份存储区域.static关键字不能应用于局部变量,因此它只能作用于域.如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初始值:如 ...

最新文章

  1. ADT7410 ±0.5℃精度温度传感器
  2. 亚信科技CTO欧阳晔博士:5G网络助推边缘AI|MEET 2022
  3. 闲话能力管理(Capacity Management)
  4. 请收藏,Linux 运维必备的 40 个命令总结,收好了~
  5. hdu 1251 trie
  6. oracle服务器和客户端字符集的查看和修改
  7. 力压Java、C语言!Python 获2018年度编程语言
  8. ROCKOUT软件测试工程师,具透丨这才是让 iMessage 变得好玩有用的原因:iMessage App Store 详解...
  9. (七)python3 切片
  10. 《应用时间序列分析:R软件陪同》——2.11 习题
  11. C#基础 面试中常出现的问题
  12. 网易云课堂-吴恩达机器学习-学习归纳-1-初识机器学习
  13. 推荐两款好用的视频压缩工具(在保证画质的情况下最大限度地压制)
  14. iphone换android手机铃声,在iPhone中换个自定义铃声的11个步骤
  15. 马哥教育42期第五周作业
  16. ios无痕埋点_无痕埋点方案探究
  17. Linux中常用的英文总结
  18. 关于100层楼,扔两个鸡蛋,求摔碎鸡蛋的临界层的问题
  19. ps里jpg格式的图怎么保存成透明的
  20. 前女友闺蜜给我发了一个压缩包,居然还带密码?暴力破解ZIP加密文件的密码!

热门文章

  1. Java if判断语句的用法(一)
  2. 基于mint-ui的移动应用开发案例四(应用中心)
  3. 没有痛苦的博士求学经历,是不合格的!一位毕业了三十多名博士的中科院博导感言...
  4. GitHub 项目推荐:俄罗斯小游戏、Markdown 幻灯片、头像生成器、Logo 制作工具、坦克大战...
  5. 无人机上的光流定位通常适用于_室内定位技术
  6. python画曲线的趋势线_python添加趋势线
  7. 学习Cascade粒子系统:观察内容示例所展示的特性
  8. 你是我生命中最重要的人。我说,你是我的天使。
  9. Spyder导出的图片不清晰
  10. 协方差矩阵到底有什么用?