关于调用方法时是否默认调用构造器

mtdhy 2009-12-11 04:52:52
单子模式,请问当SingletonPattern.getInstance()时,是否会默认先调用一下构造器private SingletonPattern()?

public class SingletonPattern {
private double r;
private static SingletonPattern sp;
private SingletonPattern(){
r = java.lang.Math.random();
}
public static SingletonPattern getInstance(){
if(sp == null){
sp = new SingletonPattern();
}
return sp;
}
public double getR(){
return r;
}
public static void main(String[] args) {
SingletonPattern sp1 = SingletonPattern.getInstance();
SingletonPattern sp2 = SingletonPattern.getInstance();
System.out.println(sp1.getR());
System.out.println(sp2.getR());
}
}



...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
vaquero_vaquero 2012-01-29
  • 打赏
  • 举报
回复
或者你也可以这样理解:构造器只有在构建实例的时候才会被用到,而static的SP你可以理解为static就已经表明他在构造器之外已经被构建好了,只不过不是通过构造器构造的,而是static赋予他的,当然这个时候他的实际值是NULL,你可以重新用构造器做一个SingletonPattern赋值给他。
vaquero_vaquero 2012-01-29
  • 打赏
  • 举报
回复
我认为不会的。SP是静态的,static就表明他的调用跟构造器无关了。即使你尝试通过构造器调用SP,构造器也会告诉你构造器没有对static的SP进行拷贝。
believefym 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mtdhy 的回复:]
引用 2 楼 godismydaughter 的回复:
不会的


那要private SingletonPattern(){
      r = java.lang.Math.random();
  }
还有什么用吗?直接定义一次r = java.lang.Math.random();不得了,为何还要把它放在构造器中啊?

[/Quote]

不放在constructor里当然也是可以的
但是你怎么都得有个private的constructor。否则就不能保证sintleton了
mtdhy 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 godismydaughter 的回复:]
不会的
[/Quote]

那要private SingletonPattern(){
r = java.lang.Math.random();
}
还有什么用吗?直接定义一次r = java.lang.Math.random();不得了,为何还要把它放在构造器中啊?
swandragon 2009-12-11
  • 打赏
  • 举报
回复
是否会默认先调用一下构造器private SingletonPattern()?
不会
godismydaughter 2009-12-11
  • 打赏
  • 举报
回复
不会的
believefym 2009-12-11
  • 打赏
  • 举报
回复
楼主的程序输出结果给不了自己答案吗?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧