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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 漫步人 中级黑马   /  2013-10-23 12:55  /  1446 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 漫步人 于 2013-10-23 18:12 编辑

反射的总结
一。反射的概念透析
1.首先,反射不是新特性,反射是java1.2就开始有的,开发框架是必须用反射的,反射的基石是Class类,Class类跟关键字class是有区别的,类前面C是大写的,一个是关键字。一个是类,java程序中的各个java类的描述,就是Class!

2.Class类
Class类是描述所有java类的类,Class的实例对象就是内存中的一份字节码,得到该类的对象的方法有三种,一种是类名的Class,对象名。getClass(),第三种是Class。ForName("类名字符串");所谓的字节码,就是每个java类被编程后产生的.class文件,这个文件是二进制代码,被加载进内存里面,就是所谓的类的字节码,
3.Class。ForName()加载字节码有两种情况,第一种是,内存里面已经有那一份字节码,那么就直接返回那份字节码,如果没有,那么就自己加载一份进来,再返回那份字节码!
4.八个基本数据类型跟void也有相应的Class字节码,就是九个预定义的字节码
基本数据包装类。TYPE。就是得到对应的基本数据类的Class字节码!

二。理解反射的概念
1、反射就是把java类中的各种成分映射成相应的java类

2.Method是描述java类中的方法的类,
Method的实例对象就是每个java类中的一个方法,得到Method的字节码方式有,String.class.getMethod("方法名"参数列表的字节码),这样就可以得到具体的方法,入
String.class.getMethods(),可以得到类的所有的方法,返回一个method数组!
Method。invoke(对象名,值),就可以调用拿到的方法,如果对象名为null,则说明该方法是静态的


3.Field是描述java类中的成员字段的类
Field的实例对象就是每个java类中的一个成员变量,那么得到Field具体实例对象的代码如下
Field field =String.class.getField("成员变量名"),通过成员变量名呢,就可以得到具体哪一个成员变量了,Field [] field =String.class.getFields(),这个方法则可以得到类身上的所有成员变量
,需要注意的是呢,加入成员变量的私有的,那么上面的办法就没有办法拿到,Field getDeclaredField(String name) 就可以强行获取私有变量类,再public void setAccessible(boolean flag)这样声明下,就可以强行获得具体哪个对象的值了!
Field、。get(对象名),可以得到具体在哪个对象上,这个变量的值!

4.Package是描述了java类中的包名的类
Package的实例对象就是每个java类中的一个包名

5.ConstrucTor是描述了java类中的构造方法的类
Constructor的实例对象就是每个java类中的一个构造方法!
要得到一个构造方法的实现,先要得到那个方法所在类的字节码,具体可以如下
String .class.getConstructors(),这个方法就会返回String类所有的构造方法,要用一个构造方法类的数组去装!要拿到具体哪一个构造方法的话,就用参数类型去区分String .class.getConstructor(StringBuffer。class),传进去相应类型的字节码就可以,这样就可以拿到参数类型为StringBuffer,的构造方法!
构造方法可以得到自己所属的类,可以创建对应类的实例对象,可以得到它的访问修饰符!
class。newInstance(),跟构造方法。newInstance()的区别,在于,前者是调用默认的,也就是无参数的构造方法,后者可以任意指定构造方法!

6.反射比较消耗性能

7.数组的反射
1.反射调用方法,如果参数是一个数组,由于1.5jvm的新特性可变参数,jvm会去自动拆包,把你数组里面的每一个元素都当成一个参数传递进去,解决办法是,在数组外面,再多套一层数据,或者把数组强转成Object的
2. 数组的父类是Object,相同维度,相同类型的数组,是同一份字节码!
3.数组的名字,int类型数组是中括号【I,其他请见APi
4.Arrys。asList(数组),可以把数组转换成list,这样可以直接把数组的内容打印出来 想学习更多http://bbs.itheima.com/forum.php?mod=viewthread&tid=61022

点评

你在论坛里挺活跃的,有木有兴趣当版主?  发表于 2013-10-23 22:15

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 加入黑马