java 中反射机制和内省机制的区别是什么?

如题所述

    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....);

内省

    什么是内省

    通过反射的方式操作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);

反射机制并没有什么神奇之处。反射与RTTI的本质区别只是检查一个类的.class文件的时机不同:
反射:.class 文件是在编译时不可获得的,所以在运行时打开和检查未知类的.class文件从而变已知。
RTTI:  .class 文件是在编译时打开和检查。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网