Java 静态块 、构造块、构造函数执行顺序
来源:互联网 发布:知乎公司地址 编辑:程序博客网 时间:2024/05/29 14:48
请先参照这两个帖子:
http://blog.csdn.net/kingzone_2008/article/details/45015301
http://bbs.csdn.net/topics/391001417%20%22%22
静态块:用static申明,JVM加载类时执行,仅执行一次
构造块:类中直接用{}定义,每一次创建对象时执行
执行顺序优先级:静态块>main()>构造块>构造方法
静态块和静态属性优先执行,谁在前就先执行谁
注意:
1、每调用一次构造方法,则执行一次构造块
2、静态块只在类加载的时候加载一次
3、有多个静态变量或块时,按声明顺序加载
public class Practice { public static void main(String[] args) { new Father(); new Son(); } } class Father { protected int n = 5; protected static int m = 5; public static Father p = new Father(); public static Father p1 = new Father(); {//构造块 n = n * 2; m = m * 2; System.out.print("父类**构造块**调用;"); System.out.print("n="+n); System.out.println(" m="+m); } static {//实例化多个对象时,静态块只执行一次,即在第一个实例化对象时执行 m = m * 2; System.out.println("父类%%静态块%%调用; m="+m); } public Father() { //父类构造函数 this.n = n * 10; m = m + 10; System.out.print("父类$$构造函数$$; n="+n); System.out.println(" m="+m); } } class Son extends Father { private int sn=3; private static int sm=3; static { m = m + 2; sm=sm+2; System.out.println("【 子类 】@@ 静态块 @@调用; m="+m); } { n = n + 2; sn=sn+2; m = m + 2; System.out.println("【 子类 】^^ 构造块 ^^调用;"); System.out.println("n="+n); System.out.println("sn="+sn); System.out.println("m="+m); } public Son() { this.n = n + 10; sn=sn+10; m = m + 10; System.out.println("【 子 类 】[[ 构造函数 ]];\nn="+n); System.out.println("m="+m); } }
结果:(一)
父类**构造块**调用;n=10 m=10父类$$构造函数$$; n=100 m=20父类**构造块**调用;n=10 m=40父类$$构造函数$$; n=100 m=50父类%%静态块%%调用; m=100父类**构造块**调用;n=10 m=200父类$$构造函数$$; n=100 m=210【 子类 】@@ 静态块 @@调用; m=212父类**构造块**调用;n=10 m=424父类$$构造函数$$; n=100 m=434【 子类 】^^ 构造块 ^^调用;n=102sn=5m=436【 子 类 】[[ 构造函数 ]];n=112m=446
结果(二):【将main()函数的new Son()注释掉的运行结果】
**父类**构造块**调用;n=10 m=10父类$$构造函数$$; n=100 m=20父类**构造块**调用;n=10 m=40父类$$构造函数$$; n=100 m=50父类%%静态块%%调用; m=100父类**构造块**调用;n=10 m=200父类$$构造函数$$; n=100 m=210**
结果(三):【将Father类中的两个引用p、p1注释掉的运行结果,结果二中的new Son();也注释掉】
父类%%静态块%%调用; m=10父类**构造块**调用;n=10 m=20父类$$构造函数$$; n=100 m=30
结果(四):【将Father类中的两个引用p、p1注释掉的运行结果,结果二中的new Son();不注释掉】
父类%%静态块%%调用; m=10父类**构造块**调用;n=10 m=20父类$$构造函数$$; n=100 m=30【 子类 】@@ 静态块 @@调用; m=32父类**构造块**调用;n=10 m=64父类$$构造函数$$; n=100 m=74【 子类 】^^ 构造块 ^^调用;n=102sn=5m=76【 子 类 】[[ 构造函数 ]];n=112m=86
阅读全文
0 0
- Java 静态块 、构造块、构造函数执行顺序
- JAVA 构造函数,静态块,非静态块执行顺序
- Java 静态语句块、语句块、构造函数执行顺序
- Java 静态语句块、语句块、构造函数执行顺序
- Java 静态语句块、语句块、构造函数执行顺序
- java 静态代码块 代码块 构造函数执行顺序
- Java 静态语句块、语句块、构造函数执行顺序
- java静态块,普通块,构造函数的执行顺序
- java一般代码块,构造块,构造函数,静态代码块的执行顺序实践
- java 静态块 非静态块 构造方法 执行顺序
- java中代码块的执行顺序--静态代码块,构造器,普通代码块,构造块,main主函数
- java 静态块、非静态块、静态函数、构造函数 执行顺序
- java 静态块、非静态块、静态函数、构造函数 执行顺序
- java 静态块、非静态块、静态函数、构造函数 执行顺序
- java 静态块、非静态块、静态函数、构造函数 执行顺序
- Java中构造函数、构造代码块、静态代码块等的执行顺序问题
- java中的静态代码块、构造代码块、构造函数执行顺序
- java基础——静态代码块、构造代码块、构造函数执行顺序
- 华为的提倡大家学雷锋,绝不让雷锋吃亏
- CS:APP二进制炸弹开篇
- 平台总线驱动
- MySql 模糊查询
- 高通功耗问题分析手段
- Java 静态块 、构造块、构造函数执行顺序
- 多github帐号的SSH key切换
- 一分钟教你知道乐观锁和悲观锁的区别(张高伟)
- 编写时钟 Applet 程序
- difference between clear data and clear cache ? Android
- PCA的数学原理
- Eclipse代码整体后退或前移
- openwrt系统初始化分析
- Spring task