java反射机制
在运行期间,从.class字节码文件中获取 构造函数,成员变量,成员方法等信息。
或取.class文件类容,先获取对应Class对象。
Class对象获取
- Class的静态方法
public static Class<?> forName(String className) throws ClassNotFoundException{...}
- ClassLoader loadClass方法
public Class<?> loadClass(String name) throws ClassNotFoundException
- 类名.class
- 实例对象.getClass()
Class类主要方法分析
public final class Class<T> implments ...{
...
//创建对象实例,实际上是通过获取Constructor,通过其无参的构造函数创建
public T newInstance() throws...{
...
return tmpConstructor.newInstance((Object[])null);
}
//获取类加载器
public ClassLoader getClassLoader(){}
//返回泛型声明中声明的类型变量数组
//Map<Cheese, Table> maps = new HashMap<Cheese, Table>();
//maps.getclass().getTypeParameters()返回 [K,V]
public TypeVariable<Class<T>>[] getTypeParameters(){}
//获取超类
public native Class<? super T> getSuperclass();
//获取超类 包含泛型信息
public Type getGenericSuperClass(){}
//获取该类全部实现的接口Class数组信息
public Class<?>[] getInterfaces(){}
//或取实现接口Type数组 包含泛型信息
public Type[] getGenericInterface(){}
//返回数组元素中的CLass对象,非数组原型不能调用此方法
public native Class<T getComponentType();
//获取该类的修饰符
public native int getModifiers();
//如果这个类是“其它类中的某个方法的内部类” 调用getEnclosingMethod() 返回的就是这个类的方法;不存在返回null
public Method getEncloseingMethod() throws SecurityException{}
//如果这个类是“其它类的构造函数中的内部类”,调用getEnclosingConstructor()就是这个类所在的构造函数;若不存在,返回null
public Constructor<?> getEncloseingConstructor() throws SecurityException{}
如果这个类是其它类的内部类,调用 getEnclosingClass则返回这个类
public Class<?> getEnclosingClass() throws SecurityException{}
//获取当前类定义所在的类
public Class<?> getDeclaringClass() throws SecurityException {}
//判断是否是匿名类
public boolean isAnonymousClass(){}
//得到该类及其父类所有的public的内部类
public Class<?>[] getClasses(){}
//得到该类所有的内部类,除去父类的
public Class<?>[] getDeclaredClasses() throws SecurityException{}
//获得某个类的所有的公共(public)的字段,包括父类中的字段
public Field[] getFields() throws SecurityException{}
//获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段
public Field[] getDeclaredFields() throws SecurityException{}
//根据name 获取public字段,包过父类中字段
public Field getField(String name){}
//根据name 获取字段,不包过父类中字段
public Field getDeclaredField(String name){}
//获得某个类的所有的公共(public)的构造器,包括父类中的构造器
public Constructor<?>[] getConstructors() throws SecurityException{}
// 返回当前类的所有构造器
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes){}
//根据参数获取public构造方法
public Constructor<T> getConstructor(Class<?>... parameterTypes){}
//根据参数获取私有的构造方法
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes){}
//获取所有的public方法,包过父类
public Method[] getMethods() throws SecurityException {}
//获取所有的方法,不包过父类
public Method[] getDeclaredMethods() throws SecurityException {}
// name 方法名 parameterTypes 方法参数列表,
// 获取public方法,包过父类
public Method getMethod(String name, Class<?>... parameterTypes){}
//获取指定方法,不包过父类
public Method getDeclaredMethod(String name, Class<?>... parameterTypes){}
static native Class<?> getPrimitiveClass(String name);
//获取所有public 注解 ,包过父类
public Annotation[] getAnnotations(){}
//获取所有 注解 ,不包过父类
public Annotation[] getDeclaredAnnotations(){}
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
public <A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass) {}
public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass) {}
public <A extends Annotation> A[] getDeclaredAnnotationsByType(Class<A> annotationClass)
}