黑马程序员技术交流社区

标题: 反射技术初探 [打印本页]

作者: tianhaolin    时间: 2018-12-18 16:33
标题: 反射技术初探
本帖最后由 tianhaolin 于 2018-12-18 17:02 编辑

1.反射
将类的组成部分封装为其他对象,就叫做反射机制
反射的好处:-在运行期阶段可以操作Class对象-可以解耦,提高程序的可扩展性Java代码在计算机中的三个阶段2.Class对象详解
获取方式
多数用于配置文件(Propertis.properties)多数用于参数传递,有些方法如class.getAnnotation(类.class)propertyBeanRowMapper<T>(T.class)多用于获取对象的字节码对象
Class对象的使用
    -Field[] getFields()       获取所有public修饰的成员变量            -Field getField(String name)    获取指定名称的public修饰的成员变量
    -Field[] getDeclaredFields()      获取所有的成员变量,不考虑修饰符
    -Field getDeclaredField(String name)     获取指定名称的成员变量
    -Method[] getMethods()       
    -Method getMethod(String name,类<?>...parameterTypes)
    -Method[] getDeclaredMethods()
    -Method getgetDeclaredMethod(String name,类<?>...parameterTypes)
例:      
[Java] 纯文本查看 复制代码
//1.获取Person的Class对象
Class personClass = Person.class;      
//2.获取eat方法
Method eat_method = personClass.getMethod("eat", String.class);

   -Constructor<?>[] getConstructors()   -Constructor<?> getConstructor(类<?>...parameterTypes)
   -Constructor<?>[] getDeclaredConstructors()
   -Constructor<?> getDeclaredConstructor(类<?>...parameterTypes)
例:           
[Java] 纯文本查看 复制代码

//1.获取Person的Class对象
Class personClass = Person.class;        
//2.获取构造器对象

Constructor constructor = personClass.getConstructor(String.class,int.class);

   -String getName();
3.暴力反射
    (Field/Method/Constructor)对象.setAccessable(true)
4.Field对象类
Field的方法
-Object get(Object obj):获取object对象指定成员变量的值
-set(Object obj,Object Value):设置object对象,指定成员变量的value
        
[Java] 纯文本查看 复制代码
 //获取Person的Class对象        
Class personClass = Person.class;        
//获取name变量的Field对象(该对象为Private对象)         
Field field = personClass.getDeclaredField("name");         
//设置暴力反射        
field.setAccessible(true);         
//获取person对象的name属性         
Person person = new Person("张三",20);         
Object value = field.get(person);         
System.out.println(value);                 //张三         
//设置person对象的name属性为李四        
field.set(person, "李四");         
System.out.println(person);               //Person{name='李四', age=20}

5.Constructure构造器类
-T newInstance(Object...initargets)
:        
[Java] 纯文本查看 复制代码
//获取Person类的Constructor对象(有参)        
Constructor<Person> personConstructor = Person.class.getConstructor(String.class,int.class);        
//调用newInstance方法创建person对象        
Person person = personConstructor.newInstance("王五", 25);        
System.out.println(person);              //Person{name='王五', age=25}

6.Method方法类
-Object invoke(Object obj,Obj...args);
:            
[Java] 纯文本查看 复制代码
//获取Person的Class对象                 
Class personClass = Person.class;            
//获取eat方法(有参)            
Method eat_method = personClass.getMethod("eat", String.class);               
//创建对象并执行方法               
Person p = new Person();               
eat_method(p,"饭");

类在计算机中的三个阶段.png (92.81 KB, 下载次数: 14)

论坛只让上传小于1M的图片???

论坛只让上传小于1M的图片???

作者: 一个人一座城0.0    时间: 2018-12-20 12:33
看看不说话




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2