本帖最后由 kuqi3712 于 2017-12-25 21:40 编辑
反射:
在运行时可以获取任意类的所有方法和属性(包括私有)
在运行时调用任意一个对象的所有方法和属性
反射的前提:
获取类的对象(Class对象)字节码对象
1.Object的getClass方法必须要有对象才能使用
2.Class 变量名 = 类名.Class;
3.Class 变量名 = Class.fornName("包名.类名");
通过反射获取构造方法并使用(为了创建对象):
Constructor<T> getConstructor(Class<?>... parameterTypes)
返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
Constructor<?>[] getConstructors()
返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有(公共public 修饰的)构造方法。
newInstance();创建一个对象
Constructor con1=stuClass.getConstructor(String.class,int.class);获取构造方法,不传参数为无参构造,上面为无参下面也为无参,有参同理
Object obj1=con1.newInstance("王五",23);(此newInstance为Constructor中的方法)
Class类:
也有getInsetance()方法只能使用无参构造
Field getField(String name)
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定(公共)成员(变量)字段。
Field[] getFields()
返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问(公共)字段(变量)。
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。
Constructor<?>[] getDeclaredConstructors()
返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。
Field getDeclaredField(String name) (name为字段值 比如Student中的 name ,age 等)
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
Field[] getDeclaredFields()
返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
Method[] getDeclaredMethods()
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
Field类:
Object get(Object obj)
返回指定对象上此 Field 表示的字段的值。
void set(Object obj, Object value)
将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
AccessibleObject:
(取消访问限制)不会检查 成员的 修饰符(private 等)
void setAccessible(boolean flag)
setAccessible(true);表示取消访问检查
Mehod类:
Object invoke(Object obj, Object... args)
执行方法,obj为具体的对象 ,后面的是参数列表
反射调用静态方法时 可以直接invoke(null);
JavaBean类:
1.用于封装数据
2.类使用公共修饰
3.提供私有修饰的成员变量(提高安全性)
4.为成员变量提供公共的访问方式(get,set)
5.有构造方法(只提供无参的即可),选择提供有参
6.实现一个序列化接口Serializable(方便被写到文件中)
BeanUtils:Apache commons主要功能就是为了简化JavaBean封装数据的操作 (不是jdk提供的)
static void setProperty(Object bean, String name, Object value)
设置属性
static String getProperty(Object bean, String name)
获取属性
上面的并不是直接操作成员变量名,而是操作的get和set方法
static void populate(Object bean, Map properties)
底层是反射;
把map中的映射关系赋值给javaBean中对应的成员变量,如果没有找到的就不赋值
jar包,里面存的class文件
1.将jar包复制到项目的子目录下
2.鼠标选中要导入的jar包右键build path
泛型时只执行于编译阶段,运行时泛型会被替换为Object
|