黑马程序员---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培训、期待与您交流! ----------------------
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

黑马程序员JNI学习笔记

  • 2013-05-23 23:49
  • 37KB
  • 下载

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

什么是反射: 反射是java语言的一个特性,它允许程序在运行时来进行自我检查并且对内部的成员进行操作。例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。 java的反射机制的实现要借...

黑马程序员:Java学习笔记——反射

黑马程序员:Java学习笔记——反射     ---------------------- android培训、java培训、期待与您交流! ---------------------- ...

黑马程序员_Java反射机制学习笔记

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Java反射机制 Java反射概念: 反射(Reflection) 是Ja...

黑马程序员学习笔记之八(Java 反射机制)

---------------------- android培训、java培训、期待与您交流! ----------------------   一、Java的反射机制         Ja...
  • BBF15
  • BBF15
  • 2012-03-13 21:05
  • 186

黑马程序员_java反射机制的学习笔记

------- android培训、java培训、期待与您交流! ----------  1.反射机制: (1)定义:反射就是把Java类中的各种成分映射成相应的Java类。 (2)反射...

黑马程序员--Java基础加强学习笔记之Class类、反射(Reflect)

一、反射的基础Class类 1、如何得到各个字节码对应的实例对象 (1)类名.class,例如 System.class (2)对象.getClass(),例如 new Data().getClass...

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

第一讲    反射的应用场景 一、概述 反射技术:         Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都...

黑马程序员 java学习笔记 Day11:反射机制详解

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------    第一讲     内省引出JavaBean 一、内省 ...

黑马程序员_java基础学习笔记11_反射

------- android培训、java培训、期待与您交流! ----------
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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