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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一:反射技术:         1.概述:其实就是动态加载一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,                        并将字节码文件中的内容都封装成对象,这样便于操作这些成员。简单说:反射技术可以对一个                        类进行解剖,解剖后的属性、方法都为对象           2.反射的好处:大大的增强了程序的扩展性。           3.反射的基本步骤:                      3.1.获得Class对象,就是获取到指定的名称的字节码文件对象。                      3.2.实例化对象,获得类的属性、方法或构造函数。                      3.3.访问属性、调用方法、调用构造函数创建对象。           4.获取这个Class对象,有三种方式:                      4.1.通过每个对象都具备的方法getClass来获取。弊端:必须要创建该类对象,才可以调用getClass方法。                      4.2.每一个数据类型(基本数据类型和引用数据类型)都有一个静态的属性class。弊端:必须要先明确该类。                      4.3.使用的Class类中的方法,静态的forName方法。                             指定什么类名,就获取什么类字节码文件对象,这种方式的扩展性最强,只要将类名的字符串传入即可。
                            4.3.1. 根据给定的类名来获得  用于类加载                                       String classname ="cn.itcast.reflect.Person";// 来自配置文件                                       Class clazz = Class.forName(classname);// 此对象代表Person.class
                           4.3.2.如果拿到了对象,不知道是什么类型   用于获得对象的类型                                       Object obj = new Person();
                                       Class clazz1 = obj.getClass();// 获得对象具体的类型
                          4.3.3.如果是明确地获得某个类的Class对象  主要用于传参                                       Class clazz2 = Person.class;
             5.反射的用法:                      5.1.需要获得java类的各个组成部分,首先需要获得类的Class对象,获得Class对象的三种方式:                            Class.forName(classname) 用于做类加载
                            obj.getClass()                      用于获得对象的类型
                            类名.class                        用于获得指定的类型,传参用
                      5.2.反射类的成员方法:                           Classclazz = Person.class;
                           Methodmethod = clazz.getMethod(methodName, new Class[]{paramClazz1, paramClazz2});
                           method.invoke();     
                     5.3.反射类的构造函数:                           Constructorcon = clazz.getConstructor(new Class[]{paramClazz1, paramClazz2,...})
                           con.newInstance(params...)
                    5.4.反射类的属性:                           Fieldfield = clazz.getField(fieldName);
                           field.setAccessible(true);
                           field.setObject(value);
          6.获取了字节码文件对象后,最终都需要创建指定类的对象:                    创建对象的两种方式(其实就是对象在进行实例化时的初始化方式):
                    6.1.调用空参数的构造函数:使用了Class类中的newInstance()方法。                    6.2.调用带参数的构造函数:先要获取指定参数列表的构造函数对象,然后通过该构造函数的对象的                                                                         newInstance(实际参数)进行对象的初始化。


28 个回复

正序浏览
F@C 中级黑马 2014-9-6 17:14:17
29#
进来学习
回复 使用道具 举报
好东西,,
回复 使用道具 举报
来的及时啊,大多数文章都是一大截,找个简单明了的都难。
回复 使用道具 举报
那我以后应该怎么发才能够方便一点啊
回复 使用道具 举报
谢谢分享哈,我们要取,也得复制粘贴了
回复 使用道具 举报
首先还是非常感谢楼主的分享的,但是,楼主你在发表前应该注意一下排版,这是一个很严重的问题的
回复 使用道具 举报
lq你微笑时好美 来自手机 中级黑马 2014-9-6 12:30:09
23#
马克,还没学到
回复 使用道具 举报
排版差评,眼睛花了。。。
回复 使用道具 举报
谢谢分享了。
回复 使用道具 举报
以后会注意的,我也觉得看起来挺乱的
回复 使用道具 举报
谢谢 分享。。。学习了
回复 使用道具 举报
好乱啊  没看下去的欲望了
回复 使用道具 举报
dreamseekerkun 来自手机 中级黑马 2014-9-6 01:11:17
17#
感谢分享,刚好看到
回复 使用道具 举报
谢谢分享啦,但楼主发的代码好乱···
回复 使用道具 举报
不错的东西,收下
回复 使用道具 举报
直接做成html格式下载就好了
回复 使用道具 举报
这么多么
回复 使用道具 举报
以上内容都是网上看到的,觉得不错帖子,让我这样粘过来确实卖相没了,望见谅哈
回复 使用道具 举报
好东西
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马