java中父类和子类中的静态代码块、非静态代码块和构造器的执行顺序
来源:互联网 发布:js三秒后隐藏div 编辑:程序博客网 时间:2024/05/15 07:20
先来看一下程序:
package com.future.javaTest.testJavaProcess;/** * @ClassName: B * @Description: 父类,测试java继承时,构造器、静态代码块、非静态代码块的执行顺序。 * @author: a9858 * @date: 2016年8月19日 下午4:55:06 */public class B { public B(){ System.out.println("this is B's constructor!"); } static{ System.out.println("this is B's static block!"); } { System.out.println("this is B' static not block!"); }}
package com.future.javaTest.testJavaProcess;/** * @ClassName: A * @Description: 子类,测试java继承时,构造器、静态代码块、非静态代码块的执行顺序。 * @author: a9858 * @date: 2016年8月19日 下午4:55:06 */public class A extends B{ /** * @Title:A * @Description:构造器 */ public A(){ System.out.println("this is A's constructor!"); } static{ System.out.println("this is A's static block!"); } { System.out.println("this is A' static not block!"); }}
package com.future.javaTest.testJavaProcess;/** * @ClassName: Main * @Description: 测试类,测试java继承时,构造器、静态代码块、非静态代码块的执行顺序。<br> * 结论:this is B's static block!<br> this is A's static block!<br> this is B' static not block!<br> this is B's constructor!<br> this is A' static not block!<br> this is A's constructor!<br> * @author: a9858 * @date: 2016年8月19日 下午4:57:49 */public class Main { public static void main(String[] args) { A a = new A(); }}
测试方法测试的结果是:
this is B’s static block!
this is A’s static block!
this is B’ static not block!
this is B’s constructor!
this is A’ static not block!
this is A’s constructor
结论:在java构造对象时,先将本类和本类的父类加载到内存中,在加载的过程中会执行类中的静态代码块,执行的顺序是:父类静态代码块、子类静态代码块。然后才能继续执行程序(内存中必须有这个类才能构造这个类的实体对象嘛)。在构造本类的实体类之前就需要先调用类中的非静态代码块,然后再执行类的构造函数,来创建一个实体类,执行的顺序是:父类非静态代码块,父类构造函数,子类非静态代码块,子类构造函数。这个顺序的原因是:当new A();执行时,会调用A类的构造方法,但是A类有父类,就会先调用父类的构造方法,又因为父类有非静态代码块,所以就会先执行父类的非静态代码块,然后再执行父类的构造函数,然后才轮到A类,同样的,先执行A类的非静态代码块,再执行构造函数。
0 0
- java中父类和子类中的静态代码块、非静态代码块和构造器的执行顺序
- Java继承中父类子类构造方法、静态代码块、非静态代码块的执行顺序
- java继承中父类和子类静态、非静态代码块,构造函数,静态方法的执行顺序
- Java中静态代码块、非静态代码块和构造函数的执行顺序
- 父类和子类静态代码块、非静态代码块、构造函数(方法)执行的先后顺序问题
- java中父类的静态代码块,非静态代码块,构造方法,子类的静态代码块,构造方法等先后执行顺序
- JAVA中父类与子类静态代码块、非静态代码块、构造函数的加载顺序
- Java 父类,子类各自均有构造器和静态代码块 执行的顺序
- java静态和非静态代码块的执行顺序
- 父类子类构造方法、静态代码块、非静态代码块的执行顺序
- 静态代码块和构造器的执行顺序
- Java类中子类和基类的构造代码块,静态代码块、子类构造函数,基类构造函数的执行顺序
- 举例说明java中静态代码块、非静态代码块、构造函数的执行顺序
- Java中静态代码块、非静态代码块、构造函数的执行顺序与作用
- java中静态代码块,非静态代码块,构造函数之间的执行顺序
- JAVA继承关系中静态代码块、非静态代码块,构造函数的执行顺序
- JAVA静态代码块、非静态代码块、构造函数的执行顺序
- Java中静态代码块、非静态代码块、构造方法三者的执行顺序
- Android 布局优化
- java设计模式进阶_decorator
- Game View Stats
- BZOJ1856: [Scoi2010]字符串 组合数学
- map实现最近被使用(LRU)缓存
- java中父类和子类中的静态代码块、非静态代码块和构造器的执行顺序
- mysql 查重
- iOS 设置状态栏的字体为白色
- iOS索引列开发详解
- POJ 3259 Wormholes(判负圈)
- 冒泡排序,选择排序
- c++学习5
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- GCC跟NASM联合编译