黑马程序员技术交流社区

标题: static关键字在getStudent方法中的原因(单例设计模式) [打印本页]

作者: horace1988    时间: 2013-5-12 21:47
标题: static关键字在getStudent方法中的原因(单例设计模式)
本帖最后由 刘胜寒 于 2013-5-14 13:36 编辑

我想了半天没弄明白static关键字在getStudent方法中的原因,代表什么意义,求教~~!
  1. class Student
  2. {
  3.         private Student(){}

  4.         private static Student s = new Student();

  5.         public static Student getStudent()
  6.         {
  7.                 return s;
  8.         }
  9. }
复制代码

作者: 明天,你好    时间: 2013-5-12 21:57
因为方法是静态访问到了的对象,所以我们创建的对象也要定义成静态的
作者: 孙百鑫    时间: 2013-5-12 21:59
Student已经私有化了.根本不能new对象啊.一定要提供方法对外提供访问啊
作者: 陈志强    时间: 2013-5-12 22:00
本帖最后由 陈志强 于 2013-5-12 22:02 编辑

这是单例设计模式中的饿汉式,那么按照这个意思就是一个类中只存在一个对象。
首先是将构造函数私有化,是不让其他类建立新的对象,也就是说在本类中就需要建立一个对象。
那么既然你将构造函数都私有化了,而且自己建立的对象都私有化了,那么这时就需要提供一个公共的方法使得其他类对其进行访问,那么这个返回本类对象的方法就需要加上静态。
目的是让其他类可以通过类名直接调用这个方法。这样就不用通过建立对象调用方法,而是通过类名调用。
加了静态修饰就让每个对象共享了,保证了单例对象的唯一性!

作者: 小五555    时间: 2013-5-12 22:08
你这个程序貌似根本不对吧。。。。。。方法 getStudent 不能声明为“静态”,只能在静态类型或顶级类型中才能声明静态方法啊
作者: 石贤芝    时间: 2013-5-12 22:51
明天,你好 发表于 2013-5-12 21:57
因为方法是静态访问到了的对象,所以我们创建的对象也要定义成静态的

是的。。。。。。。。。。。。。。。。。
作者: 赵崇友    时间: 2013-5-13 00:02
楼主写的是饿汗式单例,
单例就是我们在使用这个类的对象是,引用的都是同一个对象,即在内存中就实例化了一个这类的对象。
因此要将此类的构造函数私有,不能对外提供创建对象。
getInstace方法前面的static :由于我们要用到这个类,而没有构造函数,我们只能通过getInstance方法来返回这个对象。但是,当我们没有该类对象时,是不能使用非静态方法的,
private static Student s :因为getInstace用到了s,而此方法又是静态的,所以s必须修饰为static类型的。  

因此,我们必须通过类名来调用,即类名.静态方法。所以要有static修饰,这是static的特性。。建议楼主复习下static关键字。。。。
作者: 刘胜寒    时间: 2013-5-13 08:05
小五555 发表于 2013-5-12 22:08
你这个程序貌似根本不对吧。。。。。。方法 getStudent 不能声明为“静态”,只能在静态类型或顶级类型中才 ...

单例设计模式
作者: 王永彬    时间: 2013-5-13 08:18
因为构造函数被私有化,所以必须提供个可以创建对象的对外访问的方法,因此这个getStudent()就起到了这个作用。
作者: HM刘志朋    时间: 2013-5-13 22:11
class Student
{
       
        //把构造给私有化
        private Student(){}

        //本身创建一个对象
        //静态只能访问静态
        //让外界不能通过静态访问,所以改变修饰符
        private static Student s = new Student();  //成员变量

        //为了让外界访问,并且外界还不能创建对象,那么怎么办?
        //用static修饰
        public static Student getStudent()
        {
                return s;
        }
//先说下这是单利模式中的饿汉式
单利模式就是说保证类的内存中只用一个对象。
实现的思路:
                A:外界不能创建对象
                B:本类创建一个对象
                C:提供公共的访问方式
希望能帮到你
作者: 赵利斌    时间: 2013-5-13 23:34
我也来解释一下:
是这样的,因为是单例设计模式,它对外不能创建对象,但是你可知道  类中对象的方法要么是被对象调用,要么是被类调用,显然  对象是不可能创建了,所以只能通过类名来调用,这就的了,要想被类名调用,就要求这个方法是static 的?   你说对不?
作者: horace1988    时间: 2013-5-14 21:03
我明白了。。谢谢大家 啊




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