反射: 在运行时, 可以获取 任意一个类的所有方法和属性 包括私有
在运行时, 可以调用 任意一个对象的所有方法和属性
反射的前提 : 获取字节码对象 三种方式
1. 通过对象 getClass , 2 类名. Class 3. Class.forName (路径 名字 )
通过反射获取构造方法
Constructor<>[ ] getConstructors( ) 获取所有public 修饰的构造方法
Constructor<> getConstructor( Class<> ... parameterTypes )
Constructor:
newInstance ( object...initargs ) 创建一个实例
通过反射获取成员变量
//获取学生类的字节码对象
Class zlass = Class.forname( 路径 );
//获取学生类的对象
Object stu = clazz.newInstance( ) ;
Field[ ] getFields ( ); 获取所有public 字段对象
Field getField(String name) : 获取公共的成员变量对象
Field:
Object get(Object obj) 通过对象获取成员变量的值
void set(Object obj, Object value) 通过成员变量对象,修改指定对象为指定的值
通过反射获取私有成员变量:
Field[] getDeclaredFields()
Field getDeclaredField(String name) 可以看见不能访问
setAccessible(true) 设置反射时取消Java访问检查
通过反射获取成员方法:
getMethod ( String naem,Class<>...parameterTypes ) ;
Method :
object invoke ( Object obj ,Object...args ) ;
//获取无参无返回值的方法
//获取有参无返回值的方法
//获取无参有返回值的方法
JavaBean : 类 用于封装数据
使用公共 public 进行修饰
提供 私有private 修饰的成员变量 提高安全性
为成员变量提供公共的访问方式 getter 和setter 方法
提供公共无参的构造
实现序列号接口 Serializable
BeanUtils: Apache commons 提供的开源项目之一 简化JavaBean封装数据的操作
jar 包:
static void setProperty (Object beamn , String name ,Object value ) ; 给Javabean 对象成员变量赋值
eg : BeanUtils.setProperty( p,"name" , "张三") ;
static String getProperty(Object bean, String name) 获取成员变量
static void populate(Object bean, Map properties) : 给javabean 中成员变量添加映射关系
populate 底层通过反射实现
注: beanButils 的setproperty和getproperty 方法底层不是直接操作成员变量,而是操作get和set 方法
|
|