JavaSE程序分析003 静态代码块与构造代码块的小事情
来源:互联网 发布:苹果越狱美化软件 编辑:程序博客网 时间:2024/05/21 13:53
程序段如下:
public class B { public static B t1 = new B(); public static B t2 = new B(); { System.out.println("构造块"); } static { System.out.println("静态块"); } public static void main(String[] args) { B t = new B(); }}
请问执行结果如何?
结果如下:
解释如下:
开始时JVM加载B.class,对所有的静态成员进行声明,t1 t2被初始化为默认值,为null,又因为t1 t2需要被显式初始化,所以对t1进行显式初始化,初始化代码块→构造函数(没有就是调用默认的构造函数),咦!静态代码块咋不初始化?
因为在开始时已经对static部分进行了初始化,虽然只对static变量进行了初始化,但在初始化t1时也不会再执行static块了,因为JVM认为这是第二次加载类B了,所以static会在t1初始化时被忽略掉,所以直接初始化非static部分,也就是构造块部分(输出”构造块”)接着构造函数(无输出)。接着对t2进行初始化过程同t1相同(输出’构造块’),此时就对所有的static变量都完成了初始化,接着就执行static块部分(输出’静态块’),接着执行,main方法,同样也,new了对象,调用构造函数输出(’构造块’)
0 0
- JavaSE程序分析003 静态代码块与构造代码块的小事情
- [javase]普通代码块 静态代码块 构造代码块
- 构造代码块与静态代码块
- 构造代码块与静态代码块的调用时机
- 构造代码块与静态代码块(静态初始化块)
- java 代码块,构造代码块,与静态代码块
- 静态块与构造代码块的区别
- Java中父类与子类的普通代码块,构造代码块,静态代码块 初始化
- 构造代码块,静态代码块,局部代码块与new对象时,执行的次序
- 构造块/静态代码块
- 构造函数、构造代码块与静态代码块
- 构造代码块与静态构造代码块
- 静态代码块,构造代码块与构造函数
- 普通代码块 静态块 构造块
- 静态代码块与代码块与构造器
- 一个测试程序看懂静态代码块、构造代码块以及构造方法的执行顺序
- 静态代码块,构造代码块,构造函数的执行分析
- 黑马程序员_java静态代码块、构造代码块和构造函数的执行时间分析
- 3月题外:关于GeoServer和OpenLayers3实用开源插件或组件的总结
- 微信公众号开发--模板消息
- Gradle的仓库搭建
- Linux下的管道容量及其实现机制
- CBSCore 中的字符串 SCZ
- JavaSE程序分析003 静态代码块与构造代码块的小事情
- Problem E: 平面上的点——Point类 (II)
- 安装Cocoapods的步骤及遇到错误
- Hibernate-Transaction(事务)
- 浅谈判断图片是否加载完成的方法
- RESTful API设计系列三:资源
- 构造函数
- 3-5Python中的字符串
- 欢迎使用CSDN-markdown编辑器