Class类提供了一组接口,来获取它的实例所表示的类型的信息。这里就对这一组接口根据信息类型层次进行整理,写在下面。
第一类,类层次接口
1. static Class<?> forName(String className):静态方法,用于创建Class类型实例,这里的创建实际上是到JVM中去查找引用,所有的Class对象都是通过类加载器加载到JVM中的。参数字符串是类的完全限定名称,例如String的完全限定名称为java.lang.String,这里使用完全限定名称的原因是,类在JVM中对应的Class对象是用类签名实现的,类签名的构成是:L + "完全限定名称" + ";" ,参考文章
反射相关类Class说明
,这个方法不适用于基本数据类型。类是在第一次使用时被类加载器动态加载到JVM中的,如果在调用forName之前并没有使用到className指定的类,这个方法就会启动加载过程,并且初始化类,前提要求是类必须有无参数构造方法,否则就会抛出ClassNotFoundException。
2.String getName() : 获取类的完全限定名称;
3.String getSimpleName() : 获取类名,不带包名;
4.String getCanonicalName() : 获取类的完全限定名称;
5.Class[] getClasses() : 类内部定义的或者基类内部定义的具有public访问权限的内部类列表;
6.Class[] getDeclaredClasses() : 获取类内声明的内部类,不一定是public,不包括基类内部类;
7.Class getDeclaringClass() : 如果当前类为内部类,获取声明内部类的外部类,如果当前类不是内部类,或者当前类是一个数组类或者基本数据类型,返回null;
如果当前类为内部类,获取声明内部类的外部类,如果当前类不是内部类,返回null;
9.Class[] getInterfaces() : 获取类实现的接口列表;
10.Type[] getGenericInterfaces() : 获取当前类直接实现的接口列表,不包括基类实现的接口,也不包括当前类实现接口的上层接口,如果当前类为基本数据类型,或者void类型,返回空列表;
11.Type getGenericSuperClass() : 获取类继承的基类;
12.Class getSuperClass() : 获取类继承的基类;
13.ClassLoader getClassLoader() : 获取类对应的类加载器;
第二类,类型转换的接口
1.<U> Class<? extends U> asSubClass(Class<U> clazz) : Class对象类型转换,把当前Class对象转换为参数Class对象所表示类型的某个子类型Class对象,如果转换失败,抛出ClassCastException。
2.T cast(Object obj) : 普通对象类型转换,把参数对象转换成当前类对象所表示的类型的对象;
第三类,构造方法相关接口,Constructor是一个重要的泛型类,后面会单独讲。
1.Constructor<T> getConstructor(Class<?>... parameterTypes) : 获取带有给定参数类型列表的构造函数,如果没有,抛出NoSuchMethodException;
(Class<?>... parameterTypes) :
3.Constructor[] getConstructors() :
eclaredConstructors() :
5.Constructor<?> getEnclosingConstructor()
第四类,方法相关的接口,Method是一个重要的反射类,后面会单独分析。
1.Method getMethod(String name, Class<?>... parameterTypes) : 从当前类所在的继承结构中查找方法;
2.Method getDeclaredMethod(String name, Class<?>... parameterTypes) :从当前类的定义中查找方法,不包括基类中定义的方法;
3.Method[] getMethods() : 从当前类所在的继承结构中获取所有方法列表;
4.Method[] getDeclaredMethods() : 从当前类的定义中获取方法列表,不包括基类中定义的方法;
5.Method getEnclosingMethod()
第五类,成员相关的接口,Field是一个重要的反射类,后面会单独分析。
1.Field getField(String name)
2.Field getDeclaredField(String name) : 这里Declared的意思,已经明了了吧。
3.Field[] getFields()
4.Field[] getDeclaredField()
第六类,注释相关的接口
1. <A extends Annotation> getAnnotation(Class<A> annotationClass)
2. Annotation[] getAnnotations()
3. Annotation[] getDeclaredAnnotations()
其他接口
1.T[] getEnumConstants()
2.Package getPackage()
3.TypeVariable<Class<T>> getTypeParameters()
4.boolean isAnonymousClass() : 是否为匿名类;
5.boolean isAnnotation() : 是否为注释类;
6.boolean isAnnotationPresent(Class<? extends Annotation> clazz) : 是否有某类注释;
7.boolean isInstance(Object obj) : 判断某对象是否为当前类型
8.boolean isEnum()
9.boolean isArray()
10. boolean isInterface()
11. boolean isLocalClass()
12. boolean isPrimitive() : 是否为基本数据类型