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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wupingtanlu 中级黑马   /  2012-5-13 00:15  /  1860 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Single

{  private int num;

        public void setNum(int num)

        {        this.num=num;

        }

        public int getNum()

        {

                return num;

        }

         Single(){}

        private static Single s =new Single();

}

class SingleDemo

{

        public static void main (String[]args)

        {

        Single s1=new Single();

        Single s2=new Single();

        s1.setNum(30);

        System.out.println(s2.getNum());

       }

}

请问 类中有private static Single s =new Single();的语句能不能算是单列呢?,请问这个s是在方法区还是堆内存中? 这个程序总共创建了几个对象?谁介绍下创建的几个对象的先后顺序,说下创建这几个对象的先后步骤呢?

6 个回复

倒序浏览
1次 static 修饰的成员只在类加载时执行一次
回复 使用道具 举报
1,不算单例。
2,S在方法区。
3,三个对象。
4,对象顺序:s   s1   s2
回复 使用道具 举报
类中有private static Single s =new Single();的语句不能算是单例,因为还可以继续生成新的Single对象。
s应该属于静态变量,在方法区中。
这个对象总共创造了三个对象:s,s1,s2.
最先创建的是对象s,在类Single被虚拟机加载的时候创建。然后根据程序执行顺序是s1,接着是s2.
s,s1,s2三个中存放的是对象在堆中的地址,并且它们三个地址值都不一样。
回复 使用道具 举报
单例代表只有一个对象,每创建一个对象都要通过new 操作来执行构造函数对所需要创建的对象进行初始化,
而你类里面的构造函数是默认修饰  非 private私有修饰,所以在SingleDemo 可以通过new Single();操作new出N个对象
把构造函数私有化,并返回对象的get方法
根据毕老师所说的俩种单例模式  我说说其中使用一点的饿汉式:
  1. class Single{
  2.         private int num;
  3.         private static Single s = new Single();

  4.         public void setNum(int num){
  5.                 this.num = num;
  6.         }

  7.         public int getNum(){
  8.                 return num;
  9.         }
  10.        
  11.         private Single() {}
  12.        
  13.         public static Single getSingle(){
  14.                 return s;
  15.         }
  16. }

  17. class SingleDemo{

  18.         public static void main(String[] args){
  19.                 Single s1 =Single.getSingle();
  20.                 Single s2 = Single.getSingle();
  21.                 s1.setNum(30);
  22.                 System.out.println(s2.getNum());
  23.                 }
  24. }
复制代码
回复 使用道具 举报
总共3个对象,兄弟,这个问题我以前也问过private static Single s =new Single();这句在Single类中,当你在主函数中new Single()的时候,这个类就加载进内存,所以private static Single s =new Single();是最先创建的对象。
回复 使用道具 举报
程旦 中级黑马 2012-5-13 22:35:18
7#
老问题了  3个 先是静态变量s  只加载一次  然后是俩个对象s1 s2
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马