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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李建锋 黑马帝   /  2012-2-16 23:12  /  2459 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李建锋 于 2012-2-17 15:20 编辑

为什么有的书说构造方法不可以使用private关键字,但是在单例设计模式中确实是使用了啊~!

9 个回复

倒序浏览
我们创建对象的时候 最常见的也最简单就是去new一个他的实例
比如String str = new String();
这时候调用了他的public String();构造函数,如果这个构造函数是private String();那么就new不出来了

所谓单例模式就是说程序运行起来以后我只有一个对象实例,内存里只有一个对象不管是谁去调用都是调用它,那么就需要把构造函数私有化不然任何人去new,再提供一个公有的返回那个单一实例的对象的方法。这就是最基础的单例模式

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
构造方法用什么修饰主要看你的业务需求啦
回复 使用道具 举报
成员都可以用private修饰,但是构造方法修饰了就不能自己创建对象
一般这样就用于单例模式
就是说一般这个类只持有一个对象,这个对象通过get方法来获取;
回复 使用道具 举报
把构造方法声明为private的理由:
1.这个类中仅仅包含供其他类调用的静态方法,没有实例方法,这意味着当某个类想要调用该类中的方法时,无需创建该类的实例,就不会触及到该类的构造方法。
2.禁止该类被继承
3.这个类需要把自身实现的细节封装起来,不允许其它程序通过new语句来创建这个类的实例。这个类向其他程序提供了获取自身实例的静态方法,这种方法称为静态工厂方法。

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
构造方法有4种修饰,public、protected、默认、private。public的构造方法你可以用 A a =new A(); 这样来创建对象 而protected、默认修饰的构造方法你只能在这个类里进行创建该对象。 private的就不能new来创建对象了。构造方法本来就是为了方便在其他类创建不同的对象,所以构造方法一般用public修饰,protected、默认修饰符很少见。

使用private关键字可以声明属性,声明的属性不能被外部直接访问,

  同样,可以使用private声明方法,声明的方法只能在类的内部看见.

  构造方法上实际也可以使用private关键字声明,一旦声明之后,则外部就无法直接进行对象的实例化操作.

  package com.ip;

/**
* 单例测试
* @author 王康
*
*/
public class Single {
        private static Single instance = new Single();
       
        private Single(){
        }

        public static Single getInstance(){
                return instance;
        }
       
        public void print(){
                System.out.println("单例测试!");
        }
}
package com.ip;

/**
* 单例测试
* @author 王康
*
*/
public class SingleDemo {
       
                /**
                 * @param args
                 */
                public static void main(String[] args) {
                        Single s = Single.getInstance();
                        s.print();
                }
}
输出结果:
        单例测试!

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
不要被书上的只是误解了,实践才是真理

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
李建锋 黑马帝 2012-2-17 15:20:22
8#
谢谢了,略有感悟!
回复 使用道具 举报
单例模式 只能实例化一个对象, 所以用 private  这就是 单例模式的作用。

回复 使用道具 举报
使用了private变成私有的,使得外部不能调用。所以只有把他变成静态的。。让别人通过类名来调用。而不是用new的方法。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马