Java中的反射总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的反射总结相关的知识,希望对你有一定的参考价值。

反射是获取运行时类信息,即常量区中的Class信息。

要获取类信息,必然需要依据,不然系统怎么指定你要获取那个类信息,

类信息在java中就是Class类的一个对象,它是一个java类抽象,换句话说它代表了一个‘类‘(类本身是一种事物的抽象,在程序中它代表了这一事物,Class就是对这种类的一种抽象),

三种获取方式,

1).Class名称的字符串  Class.forName

2).根据Class获取, Integer.class

3).根据对象获取  (new Integer()).getClass

值得一提的是所有的Class对象的class仍然是class

下面来说一下这个Class类,

首先Class实现了Type,Type并没任何函数,是一个空接口,它只是代表这是一个类型

技术分享
package java.lang.reflect;

public interface Type {
}
View Code

另外它实现了AnnotatedElement接口,表示这是一个可以使用注解的元素。

技术分享
package java.lang.reflect;

import java.lang.annotation.Annotation;

public interface AnnotatedElement {

     boolean isAnnotationPresent(Class<? extends Annotation> annotationClass);

    <T extends Annotation> T getAnnotation(Class<T> annotationClass);

    Annotation[] getAnnotations();

    Annotation[] getDeclaredAnnotations();
}
View Code

GenericDeclaration接口,表示这是一个可以被泛型化的元素,该接口获取一个TypeVariable数组,表示泛型参数,TypeVariable实现了Type接口,也就是说泛型的参数也是一个类型

技术分享
package java.lang.reflect;

public interface GenericDeclaration {

    public TypeVariable<?>[] getTypeParameters();
}
View Code

整个类关系如下:

技术分享

Class下聚合了Field(字段),Method(方法),Constructor(构造方法)

这三个成员均继承自Member,也就是反射成员。

技术分享
package java.lang.reflect;

public interface Member {

    public static final int PUBLIC = 0;

    public static final int DECLARED = 1;

    public Class<?> getDeclaringClass();

    public String getName();

    public int getModifiers();

    public boolean isSynthetic();
}
View Code

 

以上是关于Java中的反射总结的主要内容,如果未能解决你的问题,请参考以下文章

反射机制

Java核心编程总结(十反射)

Java中的反射总结

反射机制入门

反射机制入门

Java反射学习总结