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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 游兴钟 中级黑马   /  2012-4-9 13:56  /  2517 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Student
{
        private int age;


        private static Student s = new Student();//假如我在建立本类对象时不加private会有什么影响
        private Student(){}
        public static Student getStudent()
        {
                return s;
        }



        public void setAge(int age)
        {
                this.age = age;
               
        }
        public int getAge()
        {
                return age;
        }
}

8 个回复

倒序浏览
本帖最后由 翟友伟 于 2012-4-9 14:07 编辑

private的作用是  不让外界自由创立   Student 实例对象
通过方法访问唯一的s
同一时间只能 在内存中只能存在一个对象
不private的话,谁都来可创建了

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
private static Student s = new Student();//假如我在建立本类对象时不加private会有什么影响
如果没有私有,外部的类就可以调用随意的你这个对象。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
  1. class test{
  2.                         public static void main(String[] args){
  3.                                 Student.s=null;
  4.                                 Student s1=Student.getStudent();
  5.                         }
  6.                 }
复制代码
s是Student类的静态成员,不私有当然可以直接调用,我直接把这个引用的值给改成null,你以后再调用getStudent方法,返回的s指向就是null了

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
single的特点是能够通过公用的方法有限制的获得本身类对象,如果改成public的其他类也可以随意获得该类对象,失去了single模型的特点
回复 使用道具 举报
如果不加private,别的类直接可以通过Student.s这种得属性的方式得到这个类的实例,并且还可以修改这个类的实例,这样在调用getStudent()时得到的实例就可能不是设计时的实例,这就违背了单例的实际思想!
回复 使用道具 举报
单例设计模式:1,将构造函数私有化。2,用new在本类中创建一个本类对象3,对外提供一个方法返回该对象。这样做才能保证一个类在对象中的内存唯一性。如果不把将new实例私有化,一是单一静态变量在内存中生命周期较长,可以做到控制不创建对象,但内存开销大。私有化静态实例,可以实现内存中对象唯一,外部其他类不能够创建实例对象,实现数据的共享(一个对象)。
回复 使用道具 举报
谢谢大家 总算弄明白了
回复 使用道具 举报
pray 高级黑马 2014-4-26 08:07:09
9#
我顶啊。接着顶
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马