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)当你想把的内存中的对象保存到 ...
随机推荐
- 重温委托(delegate)和事件(event)
1.delegate是什么 某种意义上来讲,你可以把delegate理解成C语言中的函数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m,说白了就是可以把方法当作 ...
- 使用Spring的JAVA Mail支持简化邮件发送(转)
闲来无事,翻看<Spring in Action>,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多. Spring的邮件发送的核心是Mail ...
- 百度map android sdk3.5实现定位 并跳转的指定坐标,加入标记
前几天又下载了新的百度地图sdk,3.5版本号.发现百度地图api有了较大变化 定位和3.0版本号差点儿相同 可是设置地图中心和加入maker标记有较大变化 设置地图中心点 // 定义地图状态zoom ...
- HdU 4046 Panda 段树
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4046 意甲冠军:到了bw组成的长度为n的字符串(n<=50000).有m次操作(m<=1000 ...
- Ubuntu下将vim配置为Python IDE(转)
工欲善其事,必先利其器. 配置好了Django的环境,该把vim好好配置一下当做python的IDE来用. 在Windows下用惯了各种现成的工具,转到Linux下,一下没了头绪……好歹google出 ...
- 在IIS上发布Web(使用VS2005)
最近想在IIS上发布网站,弄了一下午.遇到很多问题,幸运的是都一一解决了,现在把解决问题的过程分享出来: 安装好IIS后,在VS2005上写了个网站(新建-->网站-->ASP.NET网站 ...
- cocos2dx手写js绑定C++
这两天连续查阅了js绑定c++的非常多文章 , 有手动与自己主动两种方式 . 本来想用自己主动绑定的 , 可是NDK一直下载不下来.....就给算了 . 以下总结一下手动绑定的实现过程 : 一共三步 ...
- 在android创建bitmap避免低记忆法
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...
- ID设计
ID设计 在分布式系统中,经常需要使用全局唯一ID查找对应的数据.产生这种ID需要保证系统全局唯一,而且要高性能以及占用相对较少的空间. 全局唯一ID在数据库中一般会被设成主键,这样为了保证数据插入时 ...
- login控件“您的登录尝试不成功。请重试”的解决方法
原文:login控件"您的登录尝试不成功.请重试"的解决方法 遇到login控件“您的登录尝试不成功.请重试”报错之后,在网上找了很久,也按照如下帖子设置了 application ...