黑马程序员技术交流社区
标题:
生成了几个Singel类对象?
[打印本页]
作者:
wupingtanlu
时间:
2012-5-13 00:15
标题:
生成了几个Singel类对象?
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是在方法区还是堆内存中? 这个程序总共创建了几个对象?谁介绍下创建的几个对象的先后顺序,说下创建这几个对象的先后步骤呢?
作者:
黑马罗坚
时间:
2012-5-13 00:21
1次 static 修饰的成员只在类加载时执行一次
作者:
黑马-王建雨
时间:
2012-5-13 00:23
1,不算单例。
2,S在方法区。
3,三个对象。
4,对象顺序:s s1 s2
作者:
田林
时间:
2012-5-13 09:36
类中有private static Single s =new Single();的语句不能算是单例,因为还可以继续生成新的Single对象。
s应该属于静态变量,在方法区中。
这个对象总共创造了三个对象:s,s1,s2.
最先创建的是对象s,在类Single被虚拟机加载的时候创建。然后根据程序执行顺序是s1,接着是s2.
s,s1,s2三个中存放的是对象在堆中的地址,并且它们三个地址值都不一样。
作者:
It's_Zero
时间:
2012-5-13 10:12
单例代表只有一个对象,每创建一个对象都要通过new 操作来执行构造函数对所需要创建的对象进行初始化,
而你类里面的构造函数是默认修饰 非 private私有修饰,所以在SingleDemo 可以通过new Single();操作new出N个对象
把构造函数私有化,并返回对象的get方法
根据毕老师所说的俩种单例模式 我说说其中使用一点的饿汉式:
class Single{
private int num;
private static Single s = new Single();
public void setNum(int num){
this.num = num;
}
public int getNum(){
return num;
}
private Single() {}
public static Single getSingle(){
return s;
}
}
class SingleDemo{
public static void main(String[] args){
Single s1 =Single.getSingle();
Single s2 = Single.getSingle();
s1.setNum(30);
System.out.println(s2.getNum());
}
}
复制代码
作者:
高鑫
时间:
2012-5-13 22:28
总共3个对象,兄弟,这个问题我以前也问过private static Single s =new Single();这句在Single类中,当你在主函数中new Single()的时候,这个类就加载进内存,所以private static Single s =new Single();是最先创建的对象。
作者:
程旦
时间:
2012-5-13 22:35
老问题了 3个 先是静态变量s 只加载一次 然后是俩个对象s1 s2
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2