Java 反射简析

  一直以来,多少Java编程人员对于Java的反射讳莫如深,其实简单粗暴的说,所谓反射就是文件与Java对象之间的转换而已。 编程

咱们编写的Java后缀的文件,通过编译以后就成为class后缀的文件了,jvm对其进行登记。 jvm

反射的时候,jvm按照花名册,加载全部相关的class文件。这时候,文件里面就是代码,就是对象。 spa

加载以后呢,按照Java规则,将其还原为咱们熟悉的Java文件,这时候这个class文件就从编译状态变成了编程状态。 对象

实际反射的根本就是文件io。在这个基础之上,必须理解的是,Java的一切皆是面向对象,连基本数据类型都有对象包装类。 get


 1.得到一个类的类模版 io

 Class c = 对象名.getClass(); 编译

 Class c = Class.forName(包名+类名);  ---经常使用 class

咱们也能够根据模版来获取其对应的类对象: c.newInstance(); 基础

上面就是从jvm加载的花名册里面获取到class文件,而后调用面向对象的方法,生成对象,class就是编译后的class文件对应的对象类型。 权限

重点:Class是一个对象。

  2.根据类模版获取类的信息:

 获取类的属性: 

Filed----c.getFiled(String pname)  得到指定属性(公共字段)

Filed----c.getDeclearedFiled(String pname)  得到指定属性(全部权限字段)

Filed[]----c.getFileds()  得到全部属性(公共字段)

Filed[]----c.getDeclearedFileds()  得到全部属性(全部权限字段)

上面是基于对象获取属性与字段。

重点:属性自己也是一个对象。

获取类的方法:

Method----c.getMethod(String methodName,class[] params)  得到指定方法(公共方法)

Method----c.getDeclearedMethod(String methodName,class[] params)  得到指定方法(全部方法)

Method[]----c.getMethods()  得到全部方法(公共方法)

Method[]----c.getDeclearedMethods()  得到全部方法(全部权限方法) 

获取类的方法,同样是基于对象操做;

重点:方法自己也是对象。

因此,必须深入的理解Java的面向对象的完全与干脆。

因此反射的本质,就是从Java格式的对象文件到编译的class文件,而后从编译的class文件到可编程的Java文件,咱们看得懂的对象文件。编译的过程就是文件重写,从一直规则到另外一种规则。反射的时候,就是经过IO进行反向规则还原写。还原的过程,一切都是从文件到对象的过程。理解类是对象,属性是对象,方法是对象。

相关文章
相关标签/搜索