黑马程序员技术交流社区

标题: 构造方法私有化问题 [打印本页]

作者: 刘天骆    时间: 2012-7-6 21:34
标题: 构造方法私有化问题
对于以下代码

class Hello{
private Hello(){
}
public String print(){
  System.out.println( "Hello World!!!!");
}
}
public class Single1{
public static void main(String args[])
        Hello s = null ;
s = new Hello() ;
s.print ;
}
如何实例化对象?


作者: 曹恒业    时间: 2012-7-7 00:49
class Hello{
private Hello(){
}
//String类型的函数,没有String类型返回值,会编译不通过。建议用void。
public String print(){
  System.out.println( "Hello World!!!!");
}
}
public class Single1{
public static void main(String args[])
        Hello s = null ;
s = new Hello() ;
s.print ;
}
如何实例化对象?
==================================
由于已经在类中私有化了构造方法,则在main函数中已经无法实例化对象,如果为了使用类中的方法和属性所提供的功能,可以用单例模式解决,在类中加入如下代码:
private static Hello hello = new Hello();
public static void getHelloInstance()
{
return hello;
}
在main函数中通过以下语句引用,也可达到使用Hello中功能的效果。
Hello s = Hello.getHelloInstance();
s.print();



作者: 孤独新生    时间: 2012-7-7 08:59
因为类中的无参数构造已经私有,所以无法在主函数中创建对象,只有在类中创建静态的对象,在通过静态的方法 用(类名 .   方法名)调用 这是单例模式中的 恶汉式:

class Hello{
private Hello(){
}

  private static  Hello hello=new Hello();  //创建本身的对象 这里加static是因为下面方法中访问到了 hello 。静态只能访问静态
  public   static void getIntnstance(){    //创建静态的方法用于返回本身的对象
         return   hello;
}

public String print(){
  System.out.println( "Hello World!!!!");
      }
}

public class Single1{
public static void main(String args[]){
       Hello s = Hello.getHelloInstance() ;  //  通过类名 . 方法名 得到类的对象,这样就可以使用类中的其他方法了
        s.print();
            }

   }
作者: 丁二跃    时间: 2012-7-7 18:29
这个既然把构造方法私有化了,当然是不希望外界来调用生成实例对象了…………应该设计成单例模式

不过刚刚看了张老师的反射视频,试了下暴力反射,在外部生成实例

   Class cls=Class.forName("Hello");
        Constructor constructor=cls.getDeclaredConstructor(null);
        constructor.setAccessible(true);
        Hello h=(Hello)constructor.newInstance(null);
        h.print();




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