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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Sakuratossi 中级黑马   /  2014-8-29 00:57  /  1230 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Class c = Class.forName(“类文件名带包名”);   ——获得该类的字节码文件。
Object obj = c.newInstance() ——创建一个空参数类的对象。

如果要获得带参数的对象,就要用到Constructor对象的方法
任何数据类型都可以被字节码文件描述

字节码文件的 constructor()获取方法:
只获得本类中所有的构造函数,包括私有?
Constructor<T>       getDeclaredConstructor(Class<?>... parameterTypes)
Constructor<?>[]    getDeclaredConstructors()
本类和父类 公有的构造函数。
Constructor<T>       getConstructor(Class<?>... parameterTypes)
Constructor<?>[]     getConstructors()

————  string类型所属的字节码文件对应的类是String.class,int也一样。
———— 通过构造器对象的newInstance方法将对象初始化
Class c = Class.forName(“类文件名带包名”);
Constructor constructor = c.getConstructor(String.class,int.class)
Object obj = constructor.newInstance(“小明”, 89);

字节码文件的 字段 获取方法:

Field      getDeclaredField(String name)
                              返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
Field[]     getDeclaredFields()
                              返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
Field      getField(String name)
                              返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
Field[]     getFields()
                              返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
   

Class c = Class.forName(“类文件名带包名”);
Constructor constructor = c.getConstructor(String.class, int.class);
Object obj = constructor.newInstance(“xiaoming”,23);

Field filed = c.getDeclaredFied(“age”);
field.setAccessible(true) 对私有字段取消权限检查(暴力访问)setAccessible(true)
field.set(obj, 89);
Object o = field.get(obj)    // 获取obj对象的age的值。
sop(o) — 89.


字节码文件的 方法 获取方法:
只获得本类中所有的方法,包括私有
Method    getDeclaredMethod(String name, Class<?>... parameterTypes)
Method[]     getDeclaredMethods()
Method     getMethod(String name, Class<?>... parameterTypes)
Method[]     getMethods()

Class c = Class.forName(“类文件名带包名”);
Constructor constructor = c.getConstructor(String.class, int.class);
Object obj = constructor.newInstance(“xiaoming”,23);

相较于构造函数就在method方法中多了一个方法名

无参方法
Method m = c.getMethod(“方法名”, null)   
有参数的方法
Method m = c.getMethod(“方法名”, 参数类型.class)
c.getMethod(“show”,String.class,int.class)

运行方法
Method类中的invoke()方法:
非静态方法:
无参数:
m.invoke(所属对象,null)    // m.invoke(obj,null);
有参数:
m.invoke(所述对象,参数)  // m.invoke(obj,”小红”, 21);
静态方法 不需要用到对象
无参数
m.invoke(null,null)  
有参数
m.invoke(null,参数)  // m.invoke(null,”小红”, 21);



评分

参与人数 1技术分 +1 收起 理由
天黑偷牛 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
看的挺快啊,想尽快看完啊
回复 使用道具 举报
小子考驾照 发表于 2014-8-29 01:11
看的挺快啊,想尽快看完啊

其实已经很慢了。。。看到后面忘了前面:L
回复 使用道具 举报
赞一个,赞一个
回复 使用道具 举报
写的不错,!!
回复 使用道具 举报
恩,不错
回复 使用道具 举报
反射机制是我的薄弱点
回复 使用道具 举报
dhgcy 中级黑马 2014-8-31 14:04:13
8#
结构清晰  容易理解
回复 使用道具 举报
学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马