易截截图软件、单文件、免安装、纯绿色、仅160KB

由一道题来看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入门

 Java学习从入门到精通 
一、 JDK (Java Development Kit) 
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......

sql 2005 存储过程分页 java 代码

 create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',         
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列 ......

Java数字转字符串前面自动补0的实现


本文原址:http://blogger.org.cn/blog/more.asp?name=hongrui&id=46926
/**  
 * Java里数字转字符串前面自动补0的实现。  
 *    
 */   
public class TestStringFormat {    
  public static void ......

Java中 Object的方法


构造方法摘要
Object()
           
方法摘要
protected Object clone()
           创建并返回此对象的一个副本。
boolean equals(Object obj)
       &n ......

转:java解析xml文件四种方式


1.介绍
1)DOM(JAXP Crimson解析器)
DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号