邹瑞20201018
总结
反射
Class
java.lang.Class
public final class Class
GenericDeclaration,
Type,
AnnotatedElement
Class 是一个泛型类,如 String 就是一个 Class 对象,表示的是 Class
获取Class
-
通过Object的getClass()获取
Util util = new Util();//Util对象
Class cl = util.getClass();//获取对应的Class对象
-
通过类的class属性(域)
Class cl1 = Util.class
-
通过Class类的forName()获取
forName(String name) 中 name 指要获取的 Class 类的 全限定类名(如java.lang.String) ,此方法会抛出一个 ClassNotFoundException 异常,如果传的参数不是全限定类名或正确的全限定类名都会抛出此异 常
获取Class对象中的信息
1) 获取构造方法
public Constructor
通过参数来获取某一个 public 构造方法,其中 parameterTypes 是构造方法中参数的类型的 Class , 是一个可变参表示可以不传,不传就是无参构造
public Constructor<?>[] getConstructors() 此方法返回 Class 对象中的所有 public 构造 方法
public Constructor
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() 获取所有的内部类
评论留言