邹瑞20201018

总结

反射

Class

java.lang.Class 表示正在运行的Java应用程序中的类或接口。

public final class Class implements java.io.Serializable,

​ GenericDeclaration,

​ Type,

​ AnnotatedElement

Class 是一个泛型类,如 String 就是一个 Class 对象,表示的是 Class

获取Class

  1. 通过Object的getClass()获取

    Util util = new Util();//Util对象

    Class cl = util.getClass();//获取对应的Class对象

  2. 通过类的class属性(域)

    Class cl1 = Util.class

  3. 通过Class类的forName()获取

forName(String name) 中 name 指要获取的 Class 类的 全限定类名(如java.lang.String) ,此方法会抛出一个 ClassNotFoundException 异常,如果传的参数不是全限定类名或正确的全限定类名都会抛出此异 常

获取Class对象中的信息

1) 获取构造方法

public Constructor getConstructor(Class<?>… parameterTypes)

通过参数来获取某一个 public 构造方法,其中 parameterTypes 是构造方法中参数的类型的 Class , 是一个可变参表示可以不传,不传就是无参构造

public Constructor<?>[] getConstructors() 此方法返回 Class 对象中的所有 public 构造 方法

public Constructor getDeclaredConstructor(Class<?>… parameterTypes) 获取声 明的构造方法,与修饰符无关

public Constructor<?>[] getDeclaredConstructors() 获取所有声明的构造方法。

2)获取方法

public Method getMethod(String name, Class<?>… parameterTypes) 返回一个方法对 象,它反映此表示的类或接口的指定公共成员方法类对象。 name 指方法名称, parameterTypes 参数是以声明顺序标识方法的形式参数类型的类对象的数组,是一个可变参。

public Method[] getMethods() 返回 Class 对象所有公共方法类对象数组,包括那些由类或接 口和那些从超类和超接口继承的声明。

public Method getDeclaredMethod(String name, Class<?>… parameterTypes) 获取声 明的方法。与修饰符无关。

public Method[] getDeclaredMethods() 获取所有声明的方法。

3)获取域(Fields)

域也就是我们常说的属性。
public Field getField(String name) 根据名称获取 public 属性

public Field[] getFields() 获取所有 public 属性

public Field getDeclaredField(String name) 获取声明的属性

public Field[] getDeclaredFields() 获取所有声明的属性

4) 获取Class上的注解

public A getAnnotation(Class annotationClass) 获取注 解,如果不存在就是 null

public Annotation[] getAnnotations() 获取所有注解
public Annotation[] getDeclaredAnnotations()

5)获取其他信息

getName() 获取本类名称(全限定类名)

public native Class<? super T> getSuperclass() 返回此类的父类对象

public String getSimpleName() 返回类的简称

public Package getPackage() 返回 Package 对象

public native int getModifiers() 返回类的修饰符的整数形式,可以使用 java.lang.reflect.Modifier 的 toString(int) 查看

public Class<?>[] getInterfaces() 所有实现的接口数组

public Class<?>[] getClasses() 获取 Class 对象的 public 内部类

public Class<?>[] getDeclaredClasses() 获取所有的内部类

心得

标签

评论

this is is footer