【摘要】 目录
1、反射的概念
1、概念
2、获取字节码文件对象的方式
2.1 元数据的概念
2.2 获取class对象的方式
3、反射如何获取元数据并访问
1、访问权限
2、获取方法
2.1 访问静态方法
2.2 访问类方法
3、获取字段,读取字段的值
4、获取实现的接口
5、获取构造函数,创建实例
6、获取继承的父类
7、获取注解
4、反射实例
5…
目录
今天有时间没加班回家来好好写一篇文章,反射是Java里比较高级的概念了,一般在书的后半部分。反射也是写框架的必备技能,反射很重要,现在仍然记得刚毕业的一两年一直没有搞懂反射是什么。今天就讲讲反射,希望这篇文章能帮有同样疑惑的你解开疑团,废话不多说,让我们开始吧。
1、反射的概念
1、概念
反射,指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对任意一个对象,都能调用它的任意一个方法。这种动态获取信息,以及动态调用对象方法的功能,叫做java语言的反射机制。反射很强大,有优点也有缺点。
优点:灵活性高。因为反射属于动态编译,即只有到运行时才动态创建 &获取对象实例。
缺点:执行效率低。
2、获取字节码文件对象的方式
2.1 元数据的概念
元数据(metadata):元数据是指用来描述类的数据,就是class的代码数据。所有的class文件加载到虚拟机之后都会被构建成class对象,class对象描述了一个类都有哪些东西,大家都知道的实现的接口,继承的抽象类,成员变量,类变量,成员方法,类方法,静态方法等,这个class对象就是元数据。
-
Class类:代表一个类。
-
Field类:代表类的成员变量(成员变量也称为类的属性)。
-
Method类:代表类的方法。
-
Constructor类:代表类的构造方法。
2.2 获取class对象的方式
-
2.2.1 通过对象获得,因为任何对象都必须和class对象关联
-
2.2.2 通过类对象直接获得
-
2.2.3 通过类加载器获得,因为类加载器读取class文件会返回class对象
即将用来反射的对象(随便定义的一个对象,只是为了演示)
package org.pdool.reflect;
/**
* @author 香菜
*/
public class Npc {
// 静态field
public static int NPC_TYPE_1 = 1;
// 私有成员变量
private int npcType;
// 共有成员变量
public String name;
// 无参构造函数
public Npc() {
}
// 有参构造函数
public Npc(int npcType, String name) {
this.npcType = npcType;
this.name = name;
}
public int getNpcType() {
return npcType;
}
public void setNpcType(int npcType) {
this.npcType = npcType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 静态方法
public static void sayHello(String word){
System.out.println("hello " + word);
}
}
© 版权声明文章版权归作者所有,未经允许请勿转载。THE END