Java一流的施工顺序
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
Java一流的施工顺序的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 打造Linux三流娱乐环境,二流办公环境,一流Java开发环境
写这篇文章的目的首先是为让自己以后再装linux环境时候,不用再通宵google+百度,做个备忘录,其次,给新入Linux环境的同学分享一点个人经验,再高尚点的动机也算是想做为开源技术的传播布道者.我 ...
- Java学习-序列化
参考资料: http://www.2cto.com/kf/201405/305380.html http://www.cnblogs.com/xdp-gacl/p/3777987.html 序列化 ...
- 推荐一篇关于java 学习的文章,感觉写的很不错
---恢复内容开始--- 很多网友问我学习Java有没有什么捷径,我说"无他,唯手熟尔".但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛 ...
- java.io.Serializable 序列化接口
什么是序列化.反序列化? Serialization(序列化)是一种将对象以一连串的字节描述的过程: 反序列化deserialization是一种将这些字节重建成一个对象的过程. 序列化通俗一点说就是 ...
- 2016-2017-2 《Java程序设计》预备作业2总结
2016-2017-2 <Java程序设计>预备作业2总结 古希腊学者普罗塔戈说过:「头脑不是一个要被填满的容器,而是一束需要被点燃的火把.」 在对计算机系的学生情况的调查中,我说: 最近 ...
- 2016-2017-2 《Java程序设计》预备作业1 总结
2016-2017-2 <Java程序设计>预备作业1 总结 预备作业01:你期望的师生关系是什么见https://edu.cnblogs.com/campus/besti/2016-20 ...
- 招聘前端、Java后端开发、测试、Mysql DBA
公司介绍: http://www.lagou.com/gongsi/43095.html http://www.yamichu.com 简历发到: zhuye@yamichu.com 招聘职位: JA ...
- Java中的Serializable接口transient关键字,及字节、字符、对象IO
1.什么是序列化和反序列化Serialization是一种将对象转为为字节流的过程:deserialization是将字节流恢复为对象的过程. 2.什么情况下需要序列化a)当你想把的内存中的对象保存到 ...
随机推荐
- The Official Preppy Handbook
The Official Preppy Handbook: Lisa Birnbach: 9780894801402: Amazon.com: Books The Official Preppy Ha ...
- cocos2dx 制作单机麻将(一)
今天開始打算解说下cocos2dx下怎样制作国标麻将 前半部分先解说麻将的逻辑部分,由于都是代码,可能会比較枯燥无聊. 这部分讲完后,你也能够用其它游戏引擎来制作麻将 后半部分,就解说余下的cocos ...
- H3C S5120交换机ACL应用的问题
下午在S5120上ACL的时候发现不起作用,ACL如下: acl number 3001 name deny-wan-to-lan-vpn rule 0 deny ip source 10.3.0.0 ...
- OSPF拓扑排错报告
OSPF排错报告 故障点一:PPP链路故障 故障现象: R2和R4之间的PPP链路一会down一会UP 故障分析: 1) ppp 认证类型是否一致 2) ppp chap认证用 ...
- java的提取与替换操作
public class Demo02 { public static void main(String args[]){ String str = "java 技术学习班 2007032 ...
- awk使用的实例
1.使用split函数 name.url的内容: 上海 http://trip.elong.com/shanghai/jingdian elong destination 云南 htt ...
- 谷歌下解决Pop遮罩层无法遮挡滚动栏下问题
今天用pop的弹出窗体里,出现一个问题,当网页出现滚动栏里,不能遮挡住,解决Pop遮罩层无法遮挡滚动栏下问题. 可通过下载获取改动后的代码----->进入下载
- WPF与混淆器
原文:WPF与混淆器 时至今日,混淆依然是.Net程序的一道重要保护手段,而混淆器对WPF应用程序的支持是怎样的呢?我们今天就通过实例讲解一下. 首先建立如下图所示的简单的用户界面: 在界面代码中设置 ...
- sitemap.xml
内部类 在类内部的类 1.解决多继承 2.解决继承和实现接口时候方法名冲突情况 3.实现数据隐藏 只有内部类可以拥有4种访问修饰符 当内部类为private的时候,有外部类提供方法来访问内部类 常规 ...
- 如何解决Windows8.1(32bit&64bit)下Cisco VPN Client拨号时报442错误的问题
Cisco VPN Cient大多数网络管理员.技术支持project最流行的教师和最终用户VPNclient一间.对于外部网络访问内部网络,技术类人员. 随着Windows8.1的推出.Cisco ...