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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘天骆 注册黑马   /  2012-7-6 21:34  /  2194 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对于以下代码

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 ;
}
如何实例化对象?

3 个回复

倒序浏览
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();


回复 使用道具 举报
因为类中的无参数构造已经私有,所以无法在主函数中创建对象,只有在类中创建静态的对象,在通过静态的方法 用(类名 .   方法名)调用 这是单例模式中的 恶汉式:

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();
            }

   }
回复 使用道具 举报
这个既然把构造方法私有化了,当然是不希望外界来调用生成实例对象了…………应该设计成单例模式

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

   Class cls=Class.forName("Hello");
        Constructor constructor=cls.getDeclaredConstructor(null);
        constructor.setAccessible(true);
        Hello h=(Hello)constructor.newInstance(null);
        h.print();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马