黑马程序员---java 反射 学习笔记

原创 2012年03月21日 04:07:53
---------------------- android培训java培训、期待与您交流! ----------------------

反射:

     1. 概念

          反射就是在程序运行过程中, 动态地获取类及类中成员变量,构造函数, 成员方法的机制. 也可以理解为就是对类的解剖;

在java中每一个类都会生成相应的节码文件. 字节码文件中包含了类的属性和方法. 多个类的类文件都有所相同之处, 把每个具体的类文件向上抽取就得到了Class类. 用这个类来描述这样的事物;  

反射的特点和好处:

     以前的应用程序要想使用已有的对象, 在不去改动源文件的前提下. 就可以用到反射机制. 只需要把后来出现的类名告诉应用程序. 让类通过配置文件呢和该应用程序关联起来. 不用修改源代码, 只需要修改配置文件即可;

     大大的提高了程序的扩展性;

2. 反射中最常用的四个类:   

          Class 类是用来描述内存中的字节码文件,该类对象就是内存中加载的字节码文件

获取Class对象有三种方式::

                       <1>. (最常用方法) forName(String )方法通过字符串形式的类名获取Class对象;

                           <2>.(不常用方法)通过Object类中的getClass()方法;获取指定对象的Class对象;

                            <3>.类名.class(), 直接获取指定的Class对象;

<4>使用Class类的newInstance()方法可以根据字节码文件创建对象,该方法是使用当前类的无参构造函数创建对象,如果没有无参的构造函数,那么就会抛出异常;

       Constructor (构造函数的类)

                            <1>Class类中的方法getConstructor(class….) 可以根据参数类型获取到该类的构造函数;

                            <2>Constructor类中的方法newInstance(Oject….)可以调用构造函数创建对象, 传入指定的参数;

              Method(方法的类)

                            获取方法步骤:

                          <1>. 首先获取该类的字节码文件对象;

                          <2>. 可用getMethods() . getDeclaredMethods() 来获取相应的方发法, 第二个可以获取到私有的方法,获取单个方法用getMethod(String name , Class[] paramType)

                                 如 : Method  m = clazz.getMethod("equals", Object.class); 

                          <3>. 运行获取到的方法用invoke(obj , new Object()); 此外还可以获取方法的返回值类型 , 参数类型等

              Constructor 构造器, 获取该字节码文件中的构造函数

     没有空参数的构造函数,就需要获取指定的构造函数对象, 并且通过该构造函数进行初始化: 如:   Constructor con = c.getConstructor(String.class);

                             Object obj = con.newInstance("张三");

                             然后再用该对象去getMethod(str , Class...);

                              对于静态方法,则不需要建立对象, 获取方法对象后直接invoke;如:

                               Method m = c.getMethod("show" , null);

                              m.invoke(null , null);

                         

 

                  File(这个类对象代表了每一个字节码文件中的字段属性)

                          获取类文件字段属性步骤:

                          1. 先用Class类的forName()方法获取该类的字节码文件对象

                          2. 拿到字节码文件对象后, 用getField(str), getFields(), getDeclaredFields() 等多种方式获得其相应的字段对象(私有属性只能用getDeclaredFields()才能获取)

                          3. 拿到字段对象后, 首先可以用getName()等获取其一般信息, 但是此时还不能获取到它的值, 因为一个字节码文件可能被多个类的实例对象所共享, 所以要想获取它的值, 必须拥有一个该类的对象实例支持

                          4. 用字节码文件对象的newInstance()方法创建一个对象实例(此方法要求该类必须有一个空参数的构造函数)

                          5. 调用字段对象获取值的相应方法, 并将创建的对象实例传入,

                          6. 如果该字段是私有的, 可以用字段的setAccessible(true)来取消对该私有属性访问的权限检查, 但这是一种暴力访问, 不建议使用;

---------------------- android培训java培训、期待与您交流! ----------------------

java面试题--java反射机制

Java反射机制的作用: 1)在运行时判断任意一个对象所属的类。 2)在运行时判断任意一个类所具有的成员变量和方法。 3)在运行时任意调用一个对象的方法 4)在运行时构造任意一个类的对象 ...
  • snn1410
  • snn1410
  • 2015年04月10日 15:04
  • 13120

Java基础之—反射(非常重要)

反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道...
  • sinat_38259539
  • sinat_38259539
  • 2017年05月13日 13:29
  • 3608

什么是反射?什么Java反射?

什么是反射(Reflection )?Java反射?
  • BuddyUU
  • BuddyUU
  • 2016年09月07日 11:57
  • 6714

一个例子让你了解Java反射机制

本文来自:blog.csdn.net/ljphhj JAVA反射机制: 通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我...
  • u011133213
  • u011133213
  • 2013年10月18日 21:53
  • 54962

Java反射用法详解

在过去的几次面试中,都被问到了反射这块的知识,并没有系统了解过Java的反射机制(现实是几乎怎么接触过),所以这方面的问题基本都回答不上来T_T 镇定思痛,我们来一起好好看看Java中反射的用法。...
  • hb_peng
  • hb_peng
  • 2016年08月26日 21:27
  • 2644

使用JAVA反射的利与弊

在Java的20周年的纪念日的日子里,让我们来重新温习下Java里面的高级知识,Java肯定希望大家了解她,要不然你跟她天天相濡以沫了这么长时间,让她知道你竟然不了解她,不在乎她,那么她该有多伤心呢,...
  • u010454030
  • u010454030
  • 2015年04月16日 16:11
  • 1090

java反射和内省

java中一个强大的功能,莫过于反射了。通常我们看看的Struct2、Struct1、Spring、Hibernate等等集合无一不使用了反射机制。那么什么是反射呢,到底有什么用呢? 一、反射机...
  • wodeyuer125
  • wodeyuer125
  • 2014年10月21日 21:46
  • 1266

JAVA反射总结

JAVA反射总结
  • keda8997110
  • keda8997110
  • 2016年03月17日 21:25
  • 1774

JAVA反射会降低你的程序性能吗?

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能(www.111cn.net)够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的...
  • baidu_18607183
  • baidu_18607183
  • 2015年06月04日 23:41
  • 1640

JAVA中的反射机制

反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧!            一,先看一下反射的概念:      ...
  • liujiahan629629
  • liujiahan629629
  • 2014年01月08日 22:31
  • 371470
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员---java 反射 学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)