Java 中【反射机制】和【内省机制】的区别

    xiaoxiao2022-06-30  123

    目录

    一:反射1. 什么是反射2. 反射怎么用 二:内省1.什么是内省2.内省怎么用

    一:反射

    1. 什么是反射

    反射就是在运行状态把 Java 类中的各种成分映射成相应相应的 Java 类,可以动态得获取所有的属性以及动态调用任意一个方法。 (1). 一段java代码在程序的运行期间会经历三个阶段:source–>class–>runtime (2). Class对象 在java中用一个Class对象来表示一个java类的class阶段 Class对象封装了一个java类定义的成员变量、成员方法、构造方法、包名、类名等。

    2. 反射怎么用

    (1). 获得java类的各个组成部分,首先需要获得代表java类的Class对象 获得Class对象有以下三种方式:

    Class.forname(className) 用于做类加载 obj.getClass() 用于获得对象的类型 类名.class 用于获得指定的类型,传参用

    (2). 反射类的构造方法,获得实例

    Class clazz = 类名.class; Constuctor con = clazz.getConstructor(new Class[]{paramClazz1,paramClazz2,.....}); con.newInstance(params....);

    (3).反射类的成员方法

    Method m = clazz.getMethod(methodName,new Class[]{paramClazz1,paramClazz2,.....}); m.invoke();

    (4).反射类的属性

    Field field = clazz.getField(fieldName); field.setAccessible(true);//设置为可访问 filed.setObject(value); //设置值 Object value = field.get(clazz); //获得值 Object staticValue = filed.get(Class); //获得静态值

    二:内省

    1.什么是内省

    通过反射的方式操作JavaBean的属性,jdk提供了PropertyDescription类来操作访问JavaBean的属性,Beantils工具基于此来实现。

    2.内省怎么用

    (1).操作一个属性

    Object obj = new Object(); PropertyDescriptor pd = new PropertyDescriptor(propertyName,Class); //声明属性描述对象,一次只可描述一个属性 Method m = pd.getWriterMethod();//获取setter方法 m.invoke(obj,value); Method m = pd.getReaderMethod();//获取getter方法 Object value = m.invoke(obj);

    (2).操作多个属性

    BeanInfo bi = Instospector.getBeanInfo(beanClass);//获取Bean描述对象 PropertyDescriptor[] pds = bi.getPropertyDescriptors();//获取属性描述对象数组 拿到属性描述对象数组之后再循环数组,剩余的操作就跟"操作一个属性"相同了。

    转载原文:java 中反射机制和内省机制的区别


    最新回复(0)