美文网首页
Java Reflection

Java Reflection

作者: tingshuo123 | 来源:发表于2018-12-05 10:03 被阅读3次

简介

Java反射机制是让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息。通过反射还可以在运行期实例化对象,调用方法,获取实例变量,甚至是私有的实例变量。

小试牛刀

// 获取类的方法列表
Method[] methods = Person.class.getMethods();
for (Method method : methods) {
    System.out.println("method = " + method.getName());
}

Class 对象

想要检查一个类的信息,首先得获取到类的 Class 对象。 在 Java 中所有的类型(包括基本类型,数组)都有与之相对应的 Class 对象。 可以通过多种方式获取类的 Class 对象。

如果在编译期就知道一个类的名字了,你可以通过 .class 获取类的 Class 对象

Class<Person> perconClass = Person.class;

如果编译器不知到类的名字,但是在运行期间可以获得类全名的字符串,你可以这样

// 类全名
String className = "com.project.bean.Person";
Class<?> personClass = Class.forName(className);

还可以通过对象的实例获取

Person person = new Person();
Class<?> personClass = person.getClass();

包信息

通过 Class 对象获取类的包信息 (Package 对象)

// 获取包对象
Package pkg = personClass.getPackage();
// 通过包对象获取包名
String packageName = pkg.getName();

获取类名

通过 Class 对象获取类名

全限定类名(包名 + 类名)

personClass.getName()

简单类名(不包含包名)

personClass.getSimpleName()

修饰符

通过 Class 对象获取类的修饰符,public, private, static等关键字

int mod = personClass.getModifiers()

返回的是一个 int 型的数值,它是标识符的标志,可以通过 java.lang.reflect.Modifier 类的 toString(int mod) 方法转换成字符

String modStr = Modifier.toString(modifiers);

父类 Class 对象

获取父类的 Class 对象

Class<?> superClass = personClass.getSuperclass();

实现的接口

获取实现接口的 Class 对象

Class<?>[] interfaces = personClass.getInterfaces();

因为一个类可以实现多个接口,所以返回的是一个 Class 数组

注解

获取对象的注解信息(Annotation 对象)

Annotation[] annotations = personClass.getAnnotations();

构造器

获取 public 修饰的构造器信息

Constructor<?>[] constructors = personClass.getConstructors();

方法

通过 Class 对象获取类的方法信息 (Method 对象)

// 所有 public 修饰的方法信息(包括父类)
Method[] methods = Person.class.getMethods();

属性

获取对象的属性信息(Field 对象)

// 获取该类的所有 public 属性(包括父类)
Field[] fields = personClass.getFields();
// 获取该类中定义的所有属性
Field[] fields = personClass.getDeclaredFields();

构造器 (Constructor 对象)

我们知道构造器主要是用来创建并初始化一个对象,我们除了通过 new 创建对象,还可以通过 Constructor 来创建一个对象


相关文章

网友评论

      本文标题:Java Reflection

      本文链接:https://www.haomeiwen.com/subject/kshicqtx.html