黑马程序员技术交流社区

标题: private关键字 [打印本页]

作者: 李建锋    时间: 2012-2-16 23:12
标题: private关键字
本帖最后由 李建锋 于 2012-2-17 15:20 编辑

为什么有的书说构造方法不可以使用private关键字,但是在单例设计模式中确实是使用了啊~!
作者: 丁晓宇    时间: 2012-2-16 23:17
我们创建对象的时候 最常见的也最简单就是去new一个他的实例
比如String str = new String();
这时候调用了他的public String();构造函数,如果这个构造函数是private String();那么就new不出来了

所谓单例模式就是说程序运行起来以后我只有一个对象实例,内存里只有一个对象不管是谁去调用都是调用它,那么就需要把构造函数私有化不然任何人去new,再提供一个公有的返回那个单一实例的对象的方法。这就是最基础的单例模式
作者: 丁晓宇    时间: 2012-2-16 23:19
构造方法用什么修饰主要看你的业务需求啦
作者: 彭嘉聪    时间: 2012-2-17 01:13
成员都可以用private修饰,但是构造方法修饰了就不能自己创建对象
一般这样就用于单例模式
就是说一般这个类只持有一个对象,这个对象通过get方法来获取;
作者: 熊玖帅    时间: 2012-2-17 08:46
把构造方法声明为private的理由:
1.这个类中仅仅包含供其他类调用的静态方法,没有实例方法,这意味着当某个类想要调用该类中的方法时,无需创建该类的实例,就不会触及到该类的构造方法。
2.禁止该类被继承
3.这个类需要把自身实现的细节封装起来,不允许其它程序通过new语句来创建这个类的实例。这个类向其他程序提供了获取自身实例的静态方法,这种方法称为静态工厂方法。
作者: 王康    时间: 2012-2-17 09:16
构造方法有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();
                }
}
输出结果:
        单例测试!

作者: 黄锦成    时间: 2012-2-17 09:36
不要被书上的只是误解了,实践才是真理
作者: 李建锋    时间: 2012-2-17 15:20
谢谢了,略有感悟!
作者: b_boywindy    时间: 2012-2-17 16:07
单例模式 只能实例化一个对象, 所以用 private  这就是 单例模式的作用。


作者: 郑苑东    时间: 2012-2-18 20:18
使用了private变成私有的,使得外部不能调用。所以只有把他变成静态的。。让别人通过类名来调用。而不是用new的方法。。




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