Java反射

反射是框架设计的灵魂

(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))

一、反射的概述

        JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

        要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

以上的总结就是什么是反射

反射就是把java类中的各种成分映射成一个个的Java对象

例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。

     (其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述)

如图是类的正常加载过程:反射的原理在与class对象。

熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象。


其中这个Class对象很特殊。我们先了解一下这个Class类

二、关于Class

1、Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method,描述字段的Filed,描述构造器的Constructor等属性

 2、对象照镜子后(反射)可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。

 3、对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关信息。

 4、Class 对象只能由系统建立对象

 5、一个类在 JVM 中只会有一个Class实例

三、反射机制获取类有三种方法

Person类:

Person类


Test方法


执行结果

四、利用newInstance创建对象:调用的类必须有无参的构造器


测试代码


执行结果(person对象都是默认值)

五、ClassLoader类加载器


类加载器

类加载器详解:http://blog.csdn.net/ochangwen/article/details/51473120

test类


执行结果

5.1、getResourceAsStream方法


测试代码


test.properties


执行结果

六、Method: 对应类中的方法


修改后的Person类
test方法


执行结果

七、invoke方法


PersonInvoke
StudentInvoke

获取当前类的父类定义的私有方法

test

后续有待补充!!!


一些链接

http://blog.csdn.net/sinat_38259539/article/details/71799078

https://www.cnblogs.com/luoxn28/p/5686794.html

https://www.cnblogs.com/bojuetech/p/5896551.html

你可能感兴趣的:(Java反射)