黑马程序员技术交流社区
标题:
大家帮我看一下代码,关于运行结果的问题。
[打印本页]
作者:
李盈科
时间:
2012-1-7 21:45
标题:
大家帮我看一下代码,关于运行结果的问题。
本帖最后由 李盈科 于 2012-1-8 10:39 编辑
为什么运行结果是 1 和0???
public class SingletonDemo
{
public static void main(String[] args)
{
Singleton singleton = Singleton.getInstance();
System.out.println(singleton.number1);
System.out.println(singleton.number2);
}
}
class Singleton
{
private static Singleton singleton = new Singleton();
public static int number1;
public static int number2 = 0;
private Singleton()
{
number1++;
number2++;
}
public static Singleton getInstance()
{
return singleton;
}
}
复制代码
作者:
zl918
时间:
2012-1-7 22:21
哥们不按常理出牌啊。。属性公有的。。
首先,number1自动赋值为0;
然后程序运行顺序的问题,singleton 首先调用getInstance()方法,getInstance()方法又调用构造函数,这时number1、number2都为0,执行完构造函数都自增1,但是,这时,会调用一次public static int number2 = 0;但没有调用public static int number1;至于为什么,我在这里就不说了(其实我也不知道),所以就输出1,0了。
要是把public static int number1;
public static int number2 = 0 放在private static Singleton singleton = new Singleton();上面,结果就变了。
作者:
zl918
时间:
2012-1-7 22:59
1. 代码的执行顺序,代码在前的先执行;
2. 静态成员初始化语句要先于静态构造函数执行;
3. 静态成员初始化语句与静态构造函数只执行一次。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2