易截截图软件、单文件、免安装、纯绿色、仅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 NIO API详解

 
Java NIO API详解
在JDK
1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API。对于大多数应用来说,这样的API使用很方
便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来处理IO。从JDK 1.4起,NIO
API作为一个基于缓冲区,并能提供非阻塞(non-blo ......

java使用rocksaw和vserv tcpip实现基于ICMP的Ping功能

一:准备 www.savarese.org download
 1.  rocksaw-1.0.0-src.tar.gz
 2.  vserv-tcpip-0.9.2-src.tar.gz
二:编译源文件得到jar包 使用Ant
 1.  build vserv-tcpip-0.9.2-src
      在vserv-tcpip-0.9.2目录下面建一个tests目录,然后在cmd窗口下进入 ......

【Java App Convert to EXE File】

* ------------------------------------------------------------------------------------
Title:    TestJava.cpp
author: gloomy fish on 2009-09-16
------------------------------------------------------------------------------------ */
#include <windows.h>
#include <stdio.h& ......

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


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

JAVA学习网址大全

    在学习JAVA的过程中,我查阅了许多有关学习JAVA的网络资源,我把它们汇总到了一起把这些资源保存起来如下列出:
       java开发学习网址大全
1.维基百科,自由的百科全书
http://zh.wikipedia.org/wiki/HTML
2.w3school网
http://www.w3school.com.cn/
3.JAVA中文首页 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号