java静态程序块、普通程序块、构造函数
2016-06-03 17:56
513 查看
java静态程序块、普通程序块、构造函数
package java002; class Root{ static{ System.out.println("root static block"); } { System.out.println("root block"); } public Root() { System.out.println("root Constructor"); } } class Mid extends Root{ static{ System.out.println("Mid static block"); } { System.out.println("Mid block"); } public Mid() { System.out.println("Mid Constructor"); } public Mid(String msg){ System.out.println("Mid Constructor with param " + msg); } } class Leaf extends Mid{ static{ System.out.println("Leaf static block"); } { System.out.println("Leaf block"); } public Leaf() { super("aabbcc"); System.out.println("Leaf Constructor"); } } public class Main { public static void main(String[] args) { new Leaf(); new Leaf(); } }程序运行结果:
root static block
Mid static block
Leaf static block
root block
root Constructor
Mid block
Mid Constructor with param aabbcc
Leaf block
Leaf Constructor
root block
root Constructor
Mid block
Mid Constructor with param aabbcc
Leaf block
Leaf Constructor
静态程序块执行在普通程序块之前,普通程序块执行在构造函数块之间,静态程序块只执行一次。所以上面的运行结果中
root static block
Mid static block
Leaf static block
只出现了一次。每次创建子类对象的时候,首先需要创建父类对象,所以,会出现上面的情况。
也就是说,在第一次执行new Leaf();的时候,首先找到Mid,然后找到Root,进行静态程序块的执行。等待所有的静态程序块都执行完成后,在从父类开始进行普通程序块和构造函数的执行。
第二次执行new Leaf();的时候,不在进行静态程序块的执行,只执行普通程序块和构造函数。
相关文章推荐
- Ajax+Spring MVC实现跨域请求(JSONP)
- JAVA多线程与多进程
- [原创]java WEB学习笔记38:EL 中的 11个 隐含对象 详解
- java中的集合
- 初学Maven所报的各种错
- Eclipse常用快捷键及快捷键功能失效时的解决方案
- java中的函数
- Java学习第一天,我的第一个java程序OneJavaApp
- Spring MVC 的请求参数获取的几种方法
- java面向对象思想2
- Java Cookie详解
- 使用Java VisualVM监控远程JVM cpu jps
- 如何提高eclipse开发效率
- spring基础学习一 : 搭建spring基本架构
- java面向对象思想1
- java针对Url处理
- java生成随机编码的方法。
- Java 序列化Serializable
- RxJava入门学习笔记
- spring TestUtil Junit测试类