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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林其荣 中级黑马   /  2013-1-15 14:27  /  1407 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-16 11:09 编辑

public static void main(String[] args) {
  student s=student.show();
  student s1=student.show();
  s1.setAge(6);
  s.setAge(5);
  System.out.println(s1.getAge());
  System.out.println(s.getAge());
}
}
class student{
private int age;
public void setAge(int age){
  this.age=age;
}
public int getAge(){
  return age;
}
private student(){}
static student stu=new student();
public static student show(){
  return stu;
}
}

我用单例设计模式写了一个示例 
我想问下这个结果为什么打印的是5 5 而不是6 5 s1.setAge(6)不是把值设置成6了吗那打印
s1.getAget();结果不应该是6吗  而s.getAget()获取的值就为5 那为什么s.getAget();
就是6呢?  谁能帮我详细分析下;

3 个回复

倒序浏览
因为s1和s是同一个对象啊
回复 使用道具 举报
单例模式:保证一个类在使用过程中,只有一个实例。优势就是他的作用,这个类永远只有一个实例。
student s=student.show();
student s1=student.show();
这里的s和s1是一个实例,你给s赋值后后给s1赋值,s1的值已经覆盖掉了s的值了,所以,打印结果是5 5

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
你用的这个是先初始化对象,称为饿汉式的单例模式,3、        其优势就是:解决一个类在内存只存在一个对象,所以你的
student s=student.show();
student s1=student.show();
也就是  s和s1指向同一个引用。s1会把s覆盖掉,所以打印只有5 5

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马