由一道题来看java初始化顺序
今天看到一道题目,是这样的:(我在里面打印了一些语句,先注释掉了)
class Singleton {
private static Singleton obj= new Singleton();
public static int counter1;
public static int counter2 = 2;
private Singleton() {
counter1++;
counter2++;
// System.out.println("Singleton counter1:" + counter1);
// System.out.println("Singleton counter1:" + counter2);
}
public static Singleton getInstance() {
// System.out.println(obj.counter2 + obj.counter1);
return obj;
}
}
public class Test {
public static void main(String[] args) {
// System.out.println("Singleton.counter1:" + Singleton.counter1);
// System.out.println("Singleton.conuter2:" + Singleton.counter2);
// System.out.println("静态变量及构造函数已经初始化附值完毕");
Singleton obj =Singleton.getInstance();
System.out.println("obj.counter1==" + obj.counter1);
System.out.println("obj.counter2==" + obj.counter2);
}
}
打印的结果为1、2;
当然如果对初始化顺序很了解的人,会觉得这道题其实不咋的。。下面我给分析一下这道题吧
这时候把注释放开,打印结果如下:
Singleton counter1:1
Singleton counter1:1
Singleton.counter1:1
Singleton.conuter2:2
静态变量及构造函数已经初始化附值完毕
3
obj.counter1==1
obj.counter2==2
在得到实例化之前,程序先去运行它的static变量,也就是最上面的第一句话,由这句话把counter1和counter2的值变为1,一开始它们都默认为0,因为new出实例是在static int counter和static int counter2之前。。程序的执行是有顺序的,也就是变为1后,
public static int counter1;
public static int counter2 = 2;
这两步又对变量重新赋值,因此导致最后的结果是1、2。。
为了证实我的想法,可把private static Singleton obj= new Singleton();移到第二条去或者第三条去,出来的结果是不一样的。。
总结一下初始化的顺序:1、静态变量;2、静态初始化块,即用{},没有方法名无返回值;3、变量;4、初始化块;5、构造器。
静态变量的赋值有一定的先后顺序!
相关文档:
Java学习从入门到精通
一、 JDK (Java Development Kit)
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
本文原址:http://blogger.org.cn/blog/more.asp?name=hongrui&id=46926
/**
* Java里数字转字符串前面自动补0的实现。
*
*/
public class TestStringFormat {
public static void ......
构造方法摘要
Object()
方法摘要
protected Object clone()
创建并返回此对象的一个副本。
boolean equals(Object obj)
&n ......
1.介绍
1)DOM(JAXP Crimson解析器)
DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树 ......