黑马程序员技术交流社区

标题: 单例设计模式中实例化自身时,为什么没有造成死循环。 [打印本页]

作者: 郭孟涛    时间: 2013-7-1 16:43
标题: 单例设计模式中实例化自身时,为什么没有造成死循环。
  1. class Single
  2. {
  3.     private Single(){}

  4.         private static Singgle s = new single();  // 这里为什么没有造成死循环呢?

  5.         public static Single singleGet()  
  6.         {
  7.                 return s;
  8.         }
  9. }
  10. class SingleTest
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 Single S = Single.singleGet();
  15.         }
  16. }
复制代码

作者: j816326    时间: 2013-7-1 16:57
调用的都是一个对象在堆内存中只有一个指向,private static Singgle s = new single();   对象都指向了这个对象,这就是单利的特点啊。怎么会死循环呢
作者: 极限冰风    时间: 2013-7-1 17:07
  1. public class Single {  
  2.     //私有化构造函数   
  3.     private Single(){}  
  4.     //创建一个类的对象并使用private , static修饰;将对象私有化;   
  5.     private static Single s=new Single();  
  6.     //写一个方法向外提供一个对外使用对象的方法;   
  7.     public static Single getInstance(){  
  8.         return s;  
  9.     }  
  10. }  
复制代码

作者: 王广亚    时间: 2013-7-1 17:50
  1. [code]class Single

  2. {

  3.     private Single(){}


  4.         private static Singgle s = new single();  // 2、当执行到这句时在栈内存中会有一个s指向new single();  在堆内存中开辟的空间。为什么你会想到循环呢?又不是循环语句


  5.         public static Single singleGet()  

  6.         {

  7.                 return s;

  8.         }

  9. }

  10. class SingleTest

  11. {

  12.         public static void main(String[] args)
  13.         {

  14.                 Single S = Single.singleGet(); //1、当调用了Single的.singleGet这个方法是Single这个类就被加载到内存
  15.         }

  16. }
复制代码
[/code]

单例.png (16.29 KB, 下载次数: 0)

单例.png

作者: 张承富    时间: 2013-7-1 17:55
是啊,单例模式的设计就是对象只创建一次,你还来死循环了,苍天啊大地啊,仔细看视频吧
作者: 孙百鑫    时间: 2013-7-1 18:23
问题解决请联系我
作者: 刘_鑫    时间: 2013-7-1 23:34
单例模式是为了保证对象的唯一性,不可能会有楼主说的死循环。
作者: xkfxm    时间: 2013-7-7 10:26
单例设计模式中,你所问的是饿汉式。当外部类需要本类的对象时,只能通过这个类名调用本类的singleGet()方法,此时虚拟机会将single类文件加到内存;然后创建一个对象。其实当程序运行一次,在内存的静态区只有一个single对象,当这个类被加载是就会new一个对象。
简单地说就是Single  s = new Single();这句话只执行一次,在类被加载时执行。他并不存在循环,所以更别说死循环
作者: 黑马龙子    时间: 2013-7-10 08:38
Single  s = new Single();语句只执行一次,在类被加载时执行,在当执行到这句时在栈内存中会有一个s指向new single();  同时在堆内存中会开辟的空间。这里不是循环语句,所以就不用去想死循环的问题。


作者: 1007087594    时间: 2014-5-30 08:53
唯一性的……怎么会死循环,而且你那个第二行调用对象时好像还写错了,多了一个g




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2