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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© limxing 高级黑马   /  2014-12-29 18:31  /  867 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于面向对象单例设计模式的问题
先上代码:
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,那么这两个人的数据放在了哪里?(不知道我这样描述是不是正确的?还是我根本就没有理解这个问题?:()

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

4 个回复

倒序浏览
Student s1=Student.getStudent( );
    Student s2=Student.getStudent( );
在这里的话,s1和s2应该是指向的同一个对象吧,就像是一个人有两个名字,无论叫哪个名字都是指的同一个人。

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

在这里的话,我认为s1和s2是完全相同的。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
因为是单例模式,也就是说该类的对象是唯一的,无论你创建多少个引用,都是指向的同一个对象,那么无论哪个引用对该对象的操作都是有效的。单例返回的对象是唯一的,不会去 创建新的对象。如果创建了新的对象,那就不叫做单例了
回复 使用道具 举报
对象是唯一的。操作的age其实是同一个age
回复 使用道具 举报
类一加载,叫s的Student对象就加载进内存中。 Student s1=Student.getStudent();是定义一个地址,指向叫s的Student对象。同理s2也是。就像一个人身上绑着两根线,无论你拽哪根线,拉过来的都是同一个人。new 才能开辟空间创建对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马