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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马_java猿 中级黑马   /  2014-8-10 16:53  /  1336 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马_java猿 于 2014-8-15 21:41 编辑

如下代码,创建一个People类,那么当我们在main方法中创建对象如 People p = new People();  此时的People p是以怎样的形式存在于内存?(是否是局部变量和普通的局部变量有区别?)
而在单例模式中  People p 被放在类下面,此时可以理解为成员变量?  那么此时的People又是以怎样的形式存在于内存中,在饿汉式中的 People p = new People();为何可以被修饰符修饰 ,,它又是以怎样的形式存在?  另外的 单例设计模式 保证对象唯一性的 实用点在哪? 问题比较多 ,希望大神能帮帮忙解答一下 谢谢:)
  1. class People //懒汉式  后加载形式
  2. {
  3.         private static People p;
  4.         private People
  5.         {}
  6.         public static People getInstance()
  7.         {
  8.                 if (p==null)
  9.                 {
  10.                         p = new People();
  11.                 }
  12.                 return p;
  13.         }
  14. }
  15. class People //饿汉式 先加载形式
  16. {
  17.         private static People p = new People();;
  18.         private People
  19.         {}
  20.         public static People getInstance()
  21.         {
  22.                 return p;
  23.         }
  24. }
  25. class 单例设计模式
  26. {
  27.         public static void main(String[] args)
  28.         {
  29.                 People c =People.getInstance();
  30.         }
  31. }
复制代码


3 个回复

倒序浏览
People p是局部变量存在栈内存当中。
回复 使用道具 举报
第一种方案在多线程的情况下可能不是单例
回复 使用道具 举报
本帖最后由 舍我其谁 于 2014-8-10 17:34 编辑

1,既然是单列,你在main方法中是不可能创建对象的,所以你new People()编译都通不过,因为你的构造私有化了, 2. p在本类里属于本类的成员变量, 3成员变量能被修饰符修饰很正常啊,私有化是避免其他类访问该变量,关于实用性,没实际开发,真不好说,只能说在要求一个类只能存在一个对象的时候用,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马