黑马程序员技术交流社区

标题: 关于面向对象单例设计模式的问题 [打印本页]

作者: limxing    时间: 2014-12-29 18:31
标题: 关于面向对象单例设计模式的问题
关于面向对象单例设计模式的问题
先上代码:
class Student
{
    private int age;
    private static student s=new Student( );
    private Student( ){ }
    public static Student getStudent( )
    {
        return s;
    }
    public void setAge(int age)
    {
        this.age=age;
    }
    public int getAge( )
    {
        return age;
    }
}
public static void main(String[ ] args)
{
    Student s1=Student.getStudent( );
    Student s2=Student.getStudent( );
}
类内自己建立了一个对象,s1、s2同学都指向了类内的对象,那么如果s1,s2两个同学分别改变自己的age,那么这两个人的数据放在了哪里?(不知道我这样描述是不是正确的?还是我根本就没有理解这个问题?:()

作者: duluhua    时间: 2014-12-29 18:53
Student s1=Student.getStudent( );
    Student s2=Student.getStudent( );
在这里的话,s1和s2应该是指向的同一个对象吧,就像是一个人有两个名字,无论叫哪个名字都是指的同一个人。

使用s1.setAge()  然后再s2.setAge(),都是对同一个对象进行操作,可以这么看做s1.setAge()然后再s1.setAge()

在这里的话,我认为s1和s2是完全相同的。
作者: duluhua    时间: 2014-12-29 18:54
因为是单例模式,也就是说该类的对象是唯一的,无论你创建多少个引用,都是指向的同一个对象,那么无论哪个引用对该对象的操作都是有效的。单例返回的对象是唯一的,不会去 创建新的对象。如果创建了新的对象,那就不叫做单例了

作者: Eagle    时间: 2014-12-29 18:58
对象是唯一的。操作的age其实是同一个age
作者: 沐沐远去    时间: 2014-12-29 22:39
类一加载,叫s的Student对象就加载进内存中。 Student s1=Student.getStudent();是定义一个地址,指向叫s的Student对象。同理s2也是。就像一个人身上绑着两根线,无论你拽哪根线,拉过来的都是同一个人。new 才能开辟空间创建对象




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2