A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 很给力!

查看全部评分

10 个回复

倒序浏览
调用的都是一个对象在堆内存中只有一个指向,private static Singgle s = new single();   对象都指向了这个对象,这就是单利的特点啊。怎么会死循环呢

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  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. }  
复制代码

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
  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

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 很给力!

查看全部评分

回复 使用道具 举报
是啊,单例模式的设计就是对象只创建一次,你还来死循环了,苍天啊大地啊,仔细看视频吧

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
问题解决请联系我
回复 使用道具 举报
单例模式是为了保证对象的唯一性,不可能会有楼主说的死循环。
回复 使用道具 举报
单例设计模式中,你所问的是饿汉式。当外部类需要本类的对象时,只能通过这个类名调用本类的singleGet()方法,此时虚拟机会将single类文件加到内存;然后创建一个对象。其实当程序运行一次,在内存的静态区只有一个single对象,当这个类被加载是就会new一个对象。
简单地说就是Single  s = new Single();这句话只执行一次,在类被加载时执行。他并不存在循环,所以更别说死循环
回复 使用道具 举报
Single  s = new Single();语句只执行一次,在类被加载时执行,在当执行到这句时在栈内存中会有一个s指向new single();  同时在堆内存中会开辟的空间。这里不是循环语句,所以就不用去想死循环的问题。

回复 使用道具 举报
唯一性的……怎么会死循环,而且你那个第二行调用对象时好像还写错了,多了一个g

评分

参与人数 2黑马币 +18 收起 理由
一把火 + 10 很给力!
812133278@qq.co + 8 淡定

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马