黑马程序员技术交流社区
标题:
一段代码
[打印本页]
作者:
杨志罡
时间:
2011-8-7 22:41
标题:
一段代码
[code=java]package com.yang.test1;
public class MyTest {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println(singleton.counter1);
System.out.println(singleton.counter2);
}
}
class Singleton{
//情况1private static Singleton singleton = new Singleton();
public static int counter1;
public static int counter2 = 0;
//情况2private static Singleton singleton = new Singleton();
//打开其中一种情况运行
private Singleton() {
counter1++;
counter2++;
}
public static Singleton getInstance() {
return singleton;
}
}[/code]
作者:
匿名
时间:
2011-8-8 01:04
我就说一下我debug的情况//情况1private static Singleton singleton = new Singleton();
main方法开始执行Singleton singleton = Singleton.getInstance(); 的时候就开始加载Singleton这个类static修饰的字段和方法都开始产生了 此时new Singleton(); count1=1 count2=1,然后执行静态public static int counter1; 因为有值了就不用初始化,然后执行public static int counter2 = 0; 就将count2=0
//情况2private static Singleton singleton = new Singleton(); 一加载这个类的时候先public static int counter1; public static int counter2 = 0; 此时count1 和count2都为0 然后就执private static Singleton singleton = new Singleton(); 对其自增 就全部为1
主要是static先后顺序的问题public int counter1 ;public int counter2 = 0;你去掉static不管private static Singleton singleton = new Singleton(); 在哪都是执行了一次
你在构造方法中添加了这句话System.out.println("counter1="+counter1+",counter2="+counter2);会发现有他们都曾经为1过
作者:
匿名
时间:
2011-8-8 02:07
无论有多少个实例对象,首先是静态代码块,静态变量被执行且被执行一次,然后是自段,然后是父类构造方法,再到自己构造方法
作者:
匿名
时间:
2011-8-9 22:39
这么精辟的问题 怎么不给楼主加分
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2