黑马程序员技术交流社区
标题:
同一个问题,不一样的看法!关于静态代码块和单例
[打印本页]
作者:
jsfjb
时间:
2012-10-31 09:24
标题:
同一个问题,不一样的看法!关于静态代码块和单例
class Demo {
{
System.out.println("1.构造块。");// 定义构造块
}
static {
System.out.println("0.静态代码块。");// 定义静态代码块
}
public Demo() {
System.out.println("2.构造方法。");// 定义构造方法
}
}
class CodeDemo {
static {
System.out.println("在main方法中定义的静态代码块。");// 在main方法中定义静态代码块
}
public static void main(String[] args) {
new Demo();// 实例化对象
new Demo();// 实例化对象
new Demo();// 实例化对象
}
}
这道题是前面的一个同学的题,由他的这道题我先到的新的问题和思考。
上面代码的运行结果是:
在main方法中定义的静态代码块。
0.静态代码块。
1.构造块。
2.构造方法。
1.构造块。
2.构造方法。
1.构造块。
2.构造方法。
说明先执行静态代码块,再执行构造块,再执行构造方法。
关键是:<font color="Red">静态代码块只执行一次,这样的话,我们在做单例模式的时候,就可以考虑把初始化单列的代码放在静态代码块中了</font>。这样就可以更加安全,但是我又再想,这个东西和锁有关系吗?并且大家认为,把初始化单例放在静态代码块中好不好?有点小迷惑。
复制代码
作者:
林晓泉
时间:
2012-10-31 09:39
本帖最后由 林晓泉 于 2012-10-31 09:48 编辑
class Demo {
static Demo d = null;
{
System.out.println("1.构造块。");// 定义构造块
}
public static Demo getDemo()
{
return d;
}
static {
System.out.println("0.静态代码块。");// 定义静态代码块
d = new Demo();
}
private Demo() {
System.out.println("2.构造方法。");// 定义构造方法
}
int x=9;
}
class CodeDemo {
static {
System.out.println("在main方法中定义的静态代码块。");// 在main方法中定义静态代码块
}
public static void main(String[] args) {
//new Demo();// 实例化对象
// new Demo();// 实例化对象
//new Demo();// 实例化对象
Demo d = Demo.getDemo();
Demo d1 = Demo.getDemo();
Demo d2 = Demo.getDemo();
Demo d3 = Demo.getDemo();
System.out.print(d.x+".."+d1.x+".."+d2.x+".."+d3.x+"..");
}
}
复制代码
可以了,我改的代码 ,不过感觉和饿汉差不多
作者:
jsfjb
时间:
2012-10-31 10:02
林晓泉 发表于 2012-10-31 09:39
可以了,我改的代码 ,不过感觉和饿汉差不多
这儿貌似是不要考虑一下锁的问题,和安全性的,问题。考虑多一点。代码就更加健壮一点。哈哈:lol
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2