public class Hello {
int sum;
private Hello(){}
public void f(){
System.out.println("******");
}
}大家有没有办法在其它类中调用f()这个函数啊?

解决方案 »

  1.   

    有两种办法,第一就是
    public static void f()
    {...}Hello.f();第二种就是
    修改你这个类public class Hello {
    int sum;
    private Hello(){}
    public static Hello getInstance()
    {
     Hello h = new Hello();
     return h;
    }
    public void f(){
    System.out.println("******");
    }
    }
    class Test
    {
      public static void main(String[] args)
      {
        Hello hello = Hello.getInstance();
        hello.f();
      }
    }
      

  2.   

    Class c = Class.forName("Hello");
    Constructor[] t = c.getDeclaredConstructors();
    t[0].setAccessible(true);
    Object t_ = t[0].newInstance(null);
    Method method = c.getDeclaredMethod("f", null);
    method.invoke(t_, null);
    ----------------------------------
    LZ有结贴的习惯吗?
      

  3.   

    其实私有构造函数一般有两个作用:
    1、避免创建该类的对象,例如System类 
    2、保证创建的对象完全一致,Singleton设计模式,例如Runtime类
      

  4.   

    多谢CrazyGou(阿狗)(简单就是美),问题已解决!
      

  5.   

    CrazyGou(阿狗)(简单就是美)好强!学习一下
      

  6.   

    strox(我的天哪) ( ) 信誉:100    Blog   加为好友 
    怎么结贴????
    ----------------------------------------------------不要逼我掉眼泪!
      

  7.   

    比如在class aimport java.lang.reflect.*;
    class A{
    public static void main(String [] args){
    Hello hello=new Hello();
    Method method=hello.getclass.getDeclaredMethod("f");
    method.setAccessible(true);
    Method.invoke(hello);
    }
    }
    没测试不知道对不对。反正就这个意思