java 初始化参数_JAVA类的初始化顺序与initialize参数
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参数相关推荐
- java初始化实例化_java类的初始化和实例化区别
结论: 参考https://blog.csdn.net/qq_43672627/article/details/86616624 类的初始化:是完成程序执行前的准备工作.在这个阶段,静态的(变量,方法 ...
- Java创建对象过程:类的初始化和实例化
文章目录 前言 一.类的初始化 二.类的实例化 前言 Java对象的创建过程往往包括类初始化和类实例化两个阶段.类的初始化在前.类的实例化在后. 注意:这与spring的bean正好相反,spring ...
- java类的静态成员初始化_Java类的初始化顺序 (静态变量、静态初始化块、变量、初始......
很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...
- java类初始化顺序_Java 类的初始化顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用{}定义,每一次创建对象时执行 执行顺序优先级:静态块,main(),构造块,构造方法 1. 构造函数 publi ...
- java类编来那个初始化顺序_java类的初始化顺序
对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: public ...
- java初始化实例化_Java 类初始化和实例化以及多态理解
前言 本篇主要讲解了类的初始化.实例化.静态代码块.构造器.getClass().super.this 等相关的知识点,做一个总结. demo 老规矩,看代码: Father.java public ...
- java类初始化顺序_「漫画」Java中的父子类的执行顺序到底是怎么一回事?
----下课后---- 结论 类的加载顺序. (1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法) (2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 ) (3) ...
- java 接口初始化_Java类的初始化 | 学步园
类的初始化时机1.创建类的实例 2.访问类或接口的静态变量(static final常量除外,static final变量可以)3.调用类的静态方法 4.反射(Class.forName(packag ...
- java 静态数据_Java 静态数据初始化的示例代码
无论创建多少个对象,静态数据都只占用一份存储区域.static关键字不能应用于局部变量,因此它只能作用于域.如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初始值:如 ...
最新文章
- ADT7410 ±0.5℃精度温度传感器
- 亚信科技CTO欧阳晔博士:5G网络助推边缘AI|MEET 2022
- 闲话能力管理(Capacity Management)
- 请收藏,Linux 运维必备的 40 个命令总结,收好了~
- hdu 1251 trie
- oracle服务器和客户端字符集的查看和修改
- 力压Java、C语言!Python 获2018年度编程语言
- ROCKOUT软件测试工程师,具透丨这才是让 iMessage 变得好玩有用的原因:iMessage App Store 详解...
- (七)python3 切片
- 《应用时间序列分析:R软件陪同》——2.11 习题
- C#基础 面试中常出现的问题
- 网易云课堂-吴恩达机器学习-学习归纳-1-初识机器学习
- 推荐两款好用的视频压缩工具(在保证画质的情况下最大限度地压制)
- iphone换android手机铃声,在iPhone中换个自定义铃声的11个步骤
- 马哥教育42期第五周作业
- ios无痕埋点_无痕埋点方案探究
- Linux中常用的英文总结
- 关于100层楼,扔两个鸡蛋,求摔碎鸡蛋的临界层的问题
- ps里jpg格式的图怎么保存成透明的
- 前女友闺蜜给我发了一个压缩包,居然还带密码?暴力破解ZIP加密文件的密码!
热门文章
- Java if判断语句的用法(一)
- 基于mint-ui的移动应用开发案例四(应用中心)
- 没有痛苦的博士求学经历,是不合格的!一位毕业了三十多名博士的中科院博导感言...
- GitHub 项目推荐:俄罗斯小游戏、Markdown 幻灯片、头像生成器、Logo 制作工具、坦克大战...
- 无人机上的光流定位通常适用于_室内定位技术
- python画曲线的趋势线_python添加趋势线
- 学习Cascade粒子系统:观察内容示例所展示的特性
- 你是我生命中最重要的人。我说,你是我的天使。
- Spyder导出的图片不清晰
- 协方差矩阵到底有什么用?