举例说明一个 java程序的加载,初始化以及运行过程
2016-05-03 19:21
537 查看
源代码如下:
加载,初始化以及运行过程:
先初始化程序入口main函数所在的类的静态变量和方法,
1.先初始化private static ExA a = new ExA();打印出父类--非静态代码块 父类--构造函数
2.static {
System.out.println("父类--静态代码块");
}
打印出:父类--静态代码块
3.本应直接执行main函数里的代码,但是因代码为new ExB();所以就引起了类
ExB的加载与初始化,private static ExB b = new ExB();打印:父类--非静态代码块 父类--构造函数 子类--非静态 代码块和子类--构造函数
4. static {
System.out.println("子类--静态代码块");
}
打印:子类——静态代码块
5.现在开始创建new ExB()对象,先去初始化父类的 {
System.out.println("父类--非静态代码块");
}和public ExA() {
System.out.println("父类--构造函数");
}然后是子类的{
System.out.println("子类--非静态代码块");
}
和
public ExB() {
System.out.println("子类--构造函数");
}
打印:父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
至此程序结束。
最终结果为:
父类--非静态代码块
父类--构造函数
父类--静态代码块
父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
子类--静态代码块
父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
[/code]
[/code]
[/code]
public class ExA { private static ExA a = new ExA(); static { System.out.println("父类--静态代码块"); } public ExA() { System.out.println("父类--构造函数"); } { System.out.println("父类--非静态代码块"); } public static void main(String[] args) { new ExB(); } } class ExB extends ExA { private static ExB b = new ExB(); static { System.out.println("子类--静态代码块"); } { System.out.println("子类--非静态代码块"); } public ExB() { System.out.println("子类--构造函数"); } }
加载,初始化以及运行过程:
先初始化程序入口main函数所在的类的静态变量和方法,
1.先初始化private static ExA a = new ExA();打印出父类--非静态代码块 父类--构造函数
2.static {
System.out.println("父类--静态代码块");
}
打印出:父类--静态代码块
3.本应直接执行main函数里的代码,但是因代码为new ExB();所以就引起了类
ExB的加载与初始化,private static ExB b = new ExB();打印:父类--非静态代码块 父类--构造函数 子类--非静态 代码块和子类--构造函数
4. static {
System.out.println("子类--静态代码块");
}
打印:子类——静态代码块
5.现在开始创建new ExB()对象,先去初始化父类的 {
System.out.println("父类--非静态代码块");
}和public ExA() {
System.out.println("父类--构造函数");
}然后是子类的{
System.out.println("子类--非静态代码块");
}
和
public ExB() {
System.out.println("子类--构造函数");
}
打印:父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
至此程序结束。
最终结果为:
父类--非静态代码块
父类--构造函数
父类--静态代码块
父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
子类--静态代码块
父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
[/code]
[/code]
[/code]
相关文章推荐
- java多线程并发库高级应用 之 多个线程之间共享数据的方式探讨
- java多线程并发库高级应用 之 其它同步工具类
- java多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- java多线程并发库高级应用 之 线程范围内共享数据
- 6.jdk命令行工具
- 1.深入理解java集合List
- 《java入门第一季》二维数组三个案例详解
- 《java入门第一季》二维数组三个案例详解
- 将一个字符串中的空格替换为“%20”(java)
- 一句话说说java设计模式
- Java:内部类
- Java String.split() 转义字符
- Eclipse内存分析工具的用法
- JDeodorant 的使用
- Java 反射基础(下)
- java-计算几何图形的面积(抽象类)
- Spring MVC源码解析
- Lombok在Eclipse/MyEclipse/STS中的安装及使用
- Java学习-21天
- 《java入门第一季》之二维数组