关于实例化的问题 class Book{private Book(){} public void show(){ System.out.println("Hello..."); }}//请问在main方法里面改怎么调用show方法?//在内存中是怎么样的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 取得Book的对象,直接book.show()就行了 看看工厂(Factory)设计模式吧。 反射啊。。自己去看看Class的API就在java.lang包下 API是有这个,但是他的原理是怎么回事? http://www.bitscn.com/pdb/java/200806/144031.html 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(); }} 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(); }} 楼主,补充一点,这个setAccessible(boolean)方法也不是万金油。API中对这个方法的局限性做了详细的说明。举个简单的例子,如果你的Book类在package1中并且访问权限不是public的,而你的AccessPrivate类不在Book的同一包中,那么当前这个AccessPrivate类在编译期就会报错,更不用说创建一个Book实例了。 Book book = constr.newInstance();这个我知道,主要是上面地两句 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();如果楼主熟悉反射,这也需要解释?汗 哪位大神有本地html格式的J2SE 1.6中文版api(不要chm的)??? 一个简单的SE问题 急 在线等 RandomAccessFile怎么解决中文乱码? 关于javax.swing.timer的问题 怎样让JFrame 最小化在右边的任务栏 关于回调的问题!!!高分求助 谁能给我j2eesdk的下载地址,在线等 轻松得到100分! Java Application在网上如何发布 如何判断数组是否为空??? 为什么有的包导不进去 基本类型相关问题。
就在java.lang包下
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();
}
}
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();
}
}
楼主,补充一点,这个setAccessible(boolean)方法也不是万金油。API中对这个方法的局限性做了详细的说明。
举个简单的例子,如果你的Book类在package1中并且访问权限不是public的,而你的AccessPrivate类不在Book的同一包中,那么当前这个AccessPrivate类在编译期就会报错,更不用说创建一个Book实例了。
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();
如果楼主熟悉反射,这也需要解释?汗