日期:2014-05-20  浏览次数:20770 次

关于Java构造方法为private
在学习Java的过程中,听老师说,如果把Java的构造方法弄成private 该内就没有多大的用途。但是我还是有一个疑问,如果把Java的构造方法弄成private,那里面的成员属性是不是只有通过static来访问呢。如果构造方法是private的话,那么有什么好处呢。如果构造方法是private的话,会不更好的封装该内呢。
  求高手解答,谢谢!
------解决方案--------------------
好处就是不能随便创建对象,
像这种的话,也不能说,《Java的构造方法弄成private 该内就没有多大的用途》
可以提供一静态的 方法返回一实例,这就是单例模式,
这种方法式也常用呀,

class A(){
  private A(){}
  pbulic name;
  
  pulbic static A creatInstance(){
    
       return new A();
  }
  
}

A a = A.createInstance();
a.name; //name 属性


------解决方案--------------------
构造函数弄成private 就是单例模式,即不想让别人用new 方法来创建多个对象,可以在类里面先生成一个对象,然后写一个public static方法把这个对象return出去。(eg:public 类名 getInstancd(){return 你刚刚生成的那个类对象;}),如果谁要用这个类的实例就用 
类名.getInstance();
获得这个对象。
------解决方案--------------------
更正:public static 类名 getInstance(){return 对象;} 
用static是因为你的构造函数是私有的,不能产生对象,所以只能用类名调用,所有只能是静态函数
------解决方案--------------------
引用:
在学习Java的过程中,听老师说,如果把Java的构造方法弄成private 该内就没有多大的用途。但是我还是有一个疑问,如果把Java的构造方法弄成private,那里面的成员属性是不是只有通过static来访问呢。如果构造方法是private的话,那么有什么好处呢。如果构造方法是private的话,会不更好的封装该内呢。
  求高手解答,谢谢!


成员属性跟你构造方法没毛线关系啦。你构造方法是private,只能说明你不能通过new Obj()的方式来实例化对象而已。这样的话,只有写个static的方法来返回自己实例化的对象。这个又跟单不单例又没关系啦。我每次都return一个new的对象,还单例个求啊。

成员变量也可以写getter/setter供外界访问的。

构造方法private也没什么好不好的,只不过可用来做单例,但并不是构造方法private就是单例。