——- android培训、java培训、期待与您交流! ———-
什么是反射?
反射就是把Java类中的各种成分映射成相应的java类。
一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象后,得到这些实例对象后有什么用呢?怎么用呢?这正是学习和应用反射的要点。
如何得到各个字节码对应的实例对象( Class类型)
类名.class,例如,System.class
对象.getClass(),例如,new Date().getClass()
Class.forName(“类名”),例如,Class.forName(“java.util.Date”);
static Class<?> forName(String className)
返回与带有给定字符串名的类或接口相关联的 Class 对象。
ClassLoader getClassLoader()
返回该类的类加载器
获得private属性的成员变量,或者方法:
Field getDeclaredField(String name)
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
Field[] getDeclaredFields()
返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
Method[] getDeclaredMethods()
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
获得public属性的成员变量,或者方法
Field getField(String name)
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Field[] getFields()
返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。
Method getMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Method[] getMethods()
返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。
获得此类的包
Package getPackage()
获取此类的包
获得字节码文件上的注释:
A<A extends Annotation> getAnnotation(Class<A> annotationClass)
如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。
Annotation[] getAnnotations()
返回此元素上存在的所有注释
获得ClassPath下的资源文件,采用相对路径:
URL getResource(String name)
查找带有给定名称的资源
InputStream getResourceAsStream(String name)
查找具有给定名称的资源。
返回字节码父类的字节码
Class<? super T> getSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class
判断字节码的类型
boolean isArray()
判定此 Class 对象是否表示一个数组类。
boolean isEnum()
当且仅当该类声明为源代码中的枚举时返回 true
boolean isPrimitive()
判定指定的 Class 对象是否表示一个基本类型。
boolean isAnnotation()
如果此 Class 对象表示一个注释类型则返回 true。
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。
创建一个空构造器的对象:
T newInstance()
创建此 Class 对象所表示的类的一个新实例。
java.lang.reflect.AccessibleObject 类是Field、Method 和 Constructor 对象的基类。它提供了将反射的对象标记为在使用时取消默认 Java 语言访问控制检查的能力。对于公共成员、默认(打包)访问成员、受保护成员和私有成员,在分别使用 Field、Method 或 Constructor 对象来设置或获取字段、调用方法,或者创建和初始化类的新实例的时候,会执行访问检查。
在反射对象中设置 accessible 标志允许具有足够特权的复杂应用程序(比如 Java Object Serialization 或其他持久性机制)以某种通常禁止使用的方式来操作对象。
static void setAccessible(AccessibleObject[] array, boolean flag)
使用单一安全性检查(为了提高效率)为一组对象设置 accessible 标志的便捷方法。
void setAccessible(boolean flag)
将此对象的 accessible 标志设置为指示的布尔值。