亲爱的观众朋友们,久しぶり,好久不见。 emmmmm,你问我为啥不写日志?。废话,当时是懒,,额 ,不对,是沉迷学习了。不说废话了,开始今天的总结吧。 反射:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法
对于任意一个对象,都能够调用它的任意一个方法
这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制.
简单来说, 就可以把.class文件比做动物的尸体, 而反射技术就是对尸体的一种解剖. 通过反射技术, 我们可以拿到该字节码文件中所有的东西, 例如成员变量, 成员方法, 构造方法, 而且还包括私有。 (强行破门)
三种获得字节码对象的方法: // 通过Object的getClass()方法获取,必须要有对象 Students = newStudent(); Classclazz = s.getClass(); // 通过类名获取字节码对象 Classclazz2 = Student.class; // static Class<?> forName(String className)
Classclazz3 = Class.forName("com.itheima_01.Student");
成员变量方法总结:
Field[]getDeclaredFields() --> 暴力反射获取所有字段(包括私有)
FieldgetDeclaredField(String name) --> 暴力反射获取指定名称字段
voidsetAccessible(boolean flag) --> 让jvm不检查权限 成员方法总结: Class: Method getMethod(String name,Class<?>... parameterTypes)
//此方法由字节码对象调用
//参数1: 要反射的方法名称
//参数2: 此方法需要接受的参数类型(注意,传入的都是字节码)
Method:
Object invoke(Object obj,Object... args)
//方法由Method对象调用
//参数1: 要由那个对象调用方法
//参数2: 方法需要的具体实参(实际参数)
BeanUtils的使用(重点加粗)
setProperty 用来给对象中的属性赋值(了解) 参数1: 需要设置属性的对象 参数2: 需要修改的属性名称 参数3: 需要修改的具体元素 getProperty 用来获取对象中的属性(了解) 参数1: 要获取的javaBean对象 参数2: 对象中的哪个属性 Populate 用来给对象中的属性赋值(掌握) 参数1: 要设置属性的对象 参数2: 将属性以Map集合的形式传入 Key : 属性的名称 Value: 属性具体的值
写完收工~
|