Java类的构造顺序
来源:互联网 发布:windows 凭据丢失 编辑:程序博客网 时间:2024/05/22 16:04
1.无对象构造
public class Test { public static int k = 0; public static int n = 99; public static int i = print("i"); static { print("静态块"); } { print("构造块"); } public int j = print("j"); public Test(String str) { System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); ++i; ++n; } public static int print(String str) { System.out.println((++k) + ":" + str + " i=" + i +" n=" + n); ++n; return ++i; } public static void main(String[] strings) { } }
在加载类的时候构造静态变量和静态代码块。
顺序按照定义的顺序。
结果为:
1:i i=0 n=99
2:静态块 i=1 n=100
2.main函数中构造对象
public class Test { public static int k = 0; public static int n = 99; public static int i = print("i"); static { print("静态块"); } { print("构造块"); } public int j = print("j"); public Test(String str) { System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); ++i; ++n; } public static int print(String str) { System.out.println((++k) + ":" + str + " i=" + i +" n=" + n); ++n; return ++i; } public static void main(String[] strings) { Test t = new Test("init"); } }
前两条同上。
在构造对象时,先构造对象里的非static变量,再调用构造函数。
非static类的变量按定义的顺序构造。
结果为:
1:i i=0 n=99
2:静态块 i=1 n=100
3:构造块 i=2 n=101
4:j i=3 n=102
5:init i=4 n=103
3.类中含static对象
public class Test { public static int k = 0; public static int n = 99; public static Test t1 = new Test("t1"); public static int i = print("i"); static { print("静态块"); } { print("构造块"); } public int j = print("j"); public static Test t2 = new Test("t2"); public Test(String str) { System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); ++i; ++n; } public static int print(String str) { System.out.println((++k) + ":" + str + " i=" + i +" n=" + n); ++n; return ++i; } public static void main(String[] strings) { Test t = new Test("init"); } }
static类型变量、对象、代码块按定义的顺序构造。
构造static对象时候,因为是构造对象所以同2所述,先构造非static变量,在调用构造函数。
结果:
1:构造块 i=0 n=99
2:j i=1 n=100
3:t1 i=2 n=101
4:i i=3 n=102
5:静态块 i=4 n=103
6:构造块 i=5 n=104
7:j i=6 n=105
8:t2 i=7 n=106
9:构造块 i=8 n=107
10:j i=9 n=108
11:init i=10 n=109
4.static变量初始化
public class Test { public static int k = 0; public static Test t1 = new Test("t1"); public static int i = print("i"); public static int n = 99; static { print("静态块"); } { print("构造块"); } public int j = print("j"); public static Test t2 = new Test("t2"); public Test(String str) { System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); ++i; ++n; } public static int print(String str) { System.out.println((++k) + ":" + str + " i=" + i +" n=" + n); ++n; return ++i; } public static void main(String[] strings) { Test t = new Test("init"); } }
先默认初始化再进行赋值。
结果:
1:构造块 i=0 n=0
2:j i=1 n=1
3:t1 i=2 n=2
4:i i=3 n=3
5:静态块 i=4 n=99
6:构造块 i=5 n=100
7:j i=6 n=101
8:t2 i=7 n=102
9:构造块 i=8 n=103
10:j i=9 n=104
11:init i=10 n=105
3 0
- java类构造对象的构造顺序
- Java类的构造顺序
- Java 类构造顺序
- Java类的完整构造执行顺序
- Java类的完整构造执行顺序
- Java类的完整构造执行顺序
- Java类完整的构造执行顺序
- Java类的完整构造执行顺序
- Java中类的构造顺序
- Java 中类的构造顺序
- Java 中类的构造顺序
- Java对象的构造顺序
- 类的构造顺序
- java 类中 构造函数的相互调用 顺序
- [Java] 类中构造器的调用顺序
- Java类构造器的调用顺序笔记
- java继承各个类构造器加载的顺序
- java类中构造方法执行的顺序
- 明年的今天会是怎样
- 算法设计:小技巧汇总
- 黑马程序员——javascript面向对象的理解
- 页面自动刷新和跳转
- 给你一组字符如{1,3,4,7,2,1,1,5,2},让你输出里面出现次数最多且数值最大的一个,出现几次
- Java类的构造顺序
- 第三套三
- 总结一下《17天搞定GRE单词》的方法
- 在linux下利用程序崩溃后的core文件分析bug
- Struts2文件上传和下载
- android绘制折线图
- Qt中的QMessage详解
- log4j配置相对路径实现日志记录
- android:uploaddatatoWeb