java中的反射机制和javaBean

Posted 刚反面

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的反射机制和javaBean相关的知识,希望对你有一定的参考价值。

反射
  反射:就是通过一个类加载进方法区时加载到栈内存中的Class字节码文件对这个类进行解剖

  通过反射可以获取到一个类的构造方法,成员方法,成员变量
  反射将一个类的各个部分映射成相应的类

反射获取构造方法
  Class类中方法
    Constructor<?>[] getConstructors() 返回当前字节码文件对象的所有public修饰的构造方法
    Constructor<T> getConstructor(Class<?>...parameterTypes)返回指定了参数的构造方法(因为是在字节码文件中去找,所以参数也是字节码文件)
    参数
      Constructor 用来描述构造方法的类 返回回来的就是Constructor对象
      Class<?>...parameterTypes 可变参数 是构造方法参数类型 如果参数不写 则返回空参构造方法
  Constructor
    T newInstance(Object...initargs) 运行构造方法创建对象
      返回值T 是泛型 没有泛型就是Object 类型
      参数 为构造方法要使用的实际参数 参数不写则运行的是空参构造方法(方法运行的时候传入的参数就是正常的参数)

  1.获取字节码文件对象
  2.通过字节码文件对象获取构造方法对象
  3.通过构造方法对象调用方法运行构造方法

反射获取对象的快捷方式
  Class类的方法
    T newInstance() 创建此Class对象所表示的类的一个新实例
    前提 必须有空参构造 空参构造必须public修饰
  1.获取字节码文件对象
  2.通过字节码文件字节调用newInstance()创建对象

反射获取成员变量(因为成员变量都是私有,所以很少用)
  Class类中方法
  //因为属性名不能重复,所以只用传参数名就可以得到Field
    Field getField(String name) 返回指定变量名的成员变量
    Field[] getFields() 返回所有成员变量
  Field类中的方法
    void set(Object obj, Object value) 为指定对象的成员变量赋值 obj为要赋值的对象,value为要赋的值
    Object get(Object obj) 返回此对象该属性的值
  1.获取字节码文件对象
  2.通过字节码文件对象获取字段对象
  3.调用set方法为字段赋值 注意 需要给定一个对象 可以通过快捷方式创建对象

暴力反射:
  如果需要得到字节码中私有的属性或者方法
  Field[] getDeclaredFields()
  Method[] getDeclaredMethods()
  同样可以得到私有的指定属性或者方法
  Method getDeclaredMethod(String name, Class<?>... parameterTypes

  Method[] getDeclaredMethods() 返回该字节码文件中的所有方法,不含构造,不含继承

  得到私有的属性或者方法之后,将其设置为反射时取消语言访问检查

  void setAccessible(boolean flag)

反射获取成员方法
  Class类中方法
    Method[] getMehthods 获取所有公共方法(包括继承的)
    Method getMehthod(String name, Class<?>...parameterTypes) String.class int.class
      获取指定的公共方法
      name:方法名
      Class<?>...parameterTypes 方法需要的参数(String.class)
    1.获取字节码文件对象
    2.通过字节码文件对象获取方法对象
    3.调用invoke方法运行当前方法,需要对象

java中的泛型属于伪泛型,只在编译的时候有效,可以直接用反射跳过编译时期避开泛型

获取字节码文件的对象

1:类名.class

2:创建该类的实例对象,然后调用getClass()  继承自Object的方法

3:Class.forName("该类所在的地址")  例:Class.forName("java.util.List")

javaBean:封装的一个实体类,有属性,get/set方法,空参构造,实现可序列化接口,一般自己设置序列化ID(防止序列化之后修改类反序列化失败)
























































以上是关于java中的反射机制和javaBean的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中反射机制五(JavaBean的内省与BeanUtils库)

java利用反射机制完成JavaBean的属性赋值

java学习--基础知识进阶第十三天--反射机制的概述和字节码对象的获取方式反射操作构造方法成员方法成员属性JavaBean的概述&BeanUtils的使用自定义BeanUtils工

JAVA基础整理-80.Java反射机制

使用java反射机制动态调用javabean的get,set方法

什么是Java反射机制,有什么作用