黑马程序员技术交流社区
标题:
java中构造函数私有化的问题
[打印本页]
作者:
文密
时间:
2012-4-8 13:04
标题:
java中构造函数私有化的问题
//构造方法私有
class Person
{
String name;
private static final Person p=new Person();
private Person()
{
name="anhngsan";
}
public static Person getP()
{
return p;
}
}
class Demo1{
public static void main(String[] args)
{
Person p=null;
p=Person .getP();
System.out.println(p.name)
}
}
程序中23行中的p和24行中的p是不是同一个p,而且在这儿申明一个Person对象有什么作用,程序的24行调用了12—15行之间的代码,然后又是通过什么调用5—9行之间的代码来实现第26的代码的,看了好半天没弄明白
作者:
江远云
时间:
2012-4-8 13:13
//构造方法私有
class Person
{
String name;
private static final Person p=new Person();
private Person()
{
name="anhngsan";
}
public static Person getP()//3调用方向返回对象
{
return p;//4
}
}
class Demo1{
public static void main(String[] args)
{
Person p=null; //1引用型变量p指向空
p=Person .getP();//2类名.静态方法获取对象 p//5p指向对象
System.out.println(p.name)//6对印成员变量name
}
}
//程序中23行中的p和24行中的p是不是同一个p,而且在这儿申明一个Person对象有什么作用,程序的24行调用了12—15行之间的//代码,然后又是通过什么调用5—9行之间的代码来实现第26的代码的,看了好半天没弄明白
23行的p和24的p是同一个p,但是所指向的引用却不同,一个是null,一个是对象在堆内存中的p。
作者:
邓海涛
时间:
2012-4-8 13:31
两个P不是同一个P,因为Person p = null ;只是在占内存中声明了一个p,还没有通过new关键字来开辟堆内存空间,是个引用,
第二个p是通过Person类中的静态方法getP()得到的,返回类型是Person,相当于是给第一个前一句中的那个p赋值,声明一个Person对象是因为静态方法getP()的返回类型是Person类型的,方便赋值。
同时由于Person的构造函数是私有的,不能在外部直接生产Person类的对象实例,所以只有通过静态方法getP()来为第一个p赋值。
不知道这样讲你是否明白点了
作者:
newlaw2013
时间:
2012-4-8 13:35
class Person
{
String name;
private static final Person p=new Person();
private Person()
{
name="anhngsan";
}
public static Person getP()
{
return p;
}
}
class Demo1{
public static void main(String[] args)
{
Person p=null;//创建了Person类的一个引用p,这个p不指向任何实例。
p=Person .getP();//因为Person类的构造函数私有化了,所以不能new它的对象,但它内部有
//一个对象,并且还提供了一个getP()方法来让外部通过这个方法获取已经建立好的对象。
//这个已经建立好的对象是什么样子的呢?它是在类内部创建的,存在于静态区中,创建的时候,用到了私有的
//构造函数private Person(),在这个函数中,将这个唯一的对象,name属性的值改为了“anhngsan”
//所以外部调用这个对象name时,就会打印“anhngsan”
System.out.println(p.name)
}
}
//在这个Person类中,它私有化了构造函数,外部无法new它的对象,Person.getP()是唯一获取Person对象的方式了,
//这样的类只有一个对象,外部对它对象的操作都只能是同一个并唯一的对象,如果像更多了解这种模式。可以去
//了解一下单例设计模式,相信了解了单例设计模式之后,您的疑问也会迎刃而解了。
复制代码
作者:
贠(yun)靖
时间:
2012-4-8 13:55
亲,你这是单例设计模式 换个马甲就不认识了?
作者:
黑马老兵
时间:
2012-4-8 16:04
确实这是一个单例设计模式,person这个类不能new 一个新的对象出来只能通过getp()方法调用你person中事先创建的那个对象。
23行中的p和24行中的p是同一p只不过他的值发生了变化,还有Person p=null;这句话并不是创建person对象的,只是定义了一个Person类型的变量p,并且赋值是空。
作者:
pray
时间:
2014-4-26 05:33
让人看完后就要往上顶往死里顶的好帖
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2