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

 我来答
百度网友ca331e8a
推荐于2019-09-27 · TA获得超过1.4万个赞
知道小有建树答主
回答量:243
采纳率:82%
帮助的人:8.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....);

内省

  • 什么是内省

  • 通过反射的方式操作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 文件是在编译时打开和检查。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式