class Book{private Book(){}  public void show(){
      System.out.println("Hello...");
  }
}
//请问在main方法里面改怎么调用show方法?
//在内存中是怎么样的?

解决方案 »

  1.   

    取得Book的对象,直接book.show()就行了
      

  2.   

    看看工厂(Factory)设计模式吧。
      

  3.   

    反射啊。。自己去看看Class的API
    就在java.lang包下
      

  4.   

    API是有这个,但是他的原理是怎么回事?
      

  5.   

    http://www.bitscn.com/pdb/java/200806/144031.html
      

  6.   


    import java.lang.reflect.*;public class AccessPrivate{
        public static void main(String[] args) throws Exception{
    Constructor<Book> constr = Book.class.getDeclaredConstructor(new Class[0]);
    constr.setAccessible(true); //楼主的问题主要就是问这个了,很暴力的方法
    Book book = constr.newInstance();
    book.show();
        }
    }
      

  7.   

    import java.lang.reflect.*;public class AccessPrivate{
        public static void main(String[] args) throws Exception{
        Constructor<Book> constr = Book.class.getDeclaredConstructor(new Class[0]);
        constr.setAccessible(true); //楼主的问题主要就是问这个了,很暴力的方法
        Book book = constr.newInstance();

        book.show();
        }
    }
      

  8.   


    楼主,补充一点,这个setAccessible(boolean)方法也不是万金油。API中对这个方法的局限性做了详细的说明。
    举个简单的例子,如果你的Book类在package1中并且访问权限不是public的,而你的AccessPrivate类不在Book的同一包中,那么当前这个AccessPrivate类在编译期就会报错,更不用说创建一个Book实例了。
      

  9.   

    Book book = constr.newInstance();这个我知道,主要是上面地两句
      

  10.   


    1. Constructor<Book> constr = Book.class.getDeclaredConstructor(new Class[0]);
    我想楼主应该熟悉反射机制吧?这句就是通过反射获得一个类Book的无参数的构造器类对象。
    2. constr.setAccessible(true); 
    通过调用AccessibleObject.setAccessible(boolean), 抑制了java的访问控制机制,就是说什么private, protected都不对该对象起作用了。
    3. Book book = constr.newInstance();
    如果楼主熟悉反射,这也需要解释?汗