反射
用来做框架的。
一个类中有多个组成部分:成员变量,方法,构造方法等。反射就是加载类,并解剖出类的各个组成部分。比如运行com.itcast.Person中的run()方法,需要先加载Person类,然后解析里面是不是有这个方法,有则加载
加载类的三种方式:
// 加载类方式1
Class cls1 = Class.forName("/reflect/src/com/itcast/reflect/Worker");
// 加载类方式2
Class cls2 = new Worker().getClass();
// 加载类方式3
Class cls3 = Worker.class;
Class对象的常用方法
public Constructor getConstructor(Class<?>...parameterTypes)
public Method getMethod(String name, Class<?>...parameterTypes)
public Field getField(String name)
相对应的(暴力反射):
public Constructor getDeclaredConstructor(Class<?>...parameterTypes)
public Method DeclaredgetMethod(String name, Class<?>...parameterTypes)
public Field DeclaredgetField(String name)
解剖出Constructor,用来创建对象
解剖出Field,用来给字段封装数据
解剖出Method,用来调用类中的方法
Constructor
取得构造方法con后,con.setAccessible(true);
方法:
static Class<?>
forName(String className)
返回与带有给定字符串名的类或接口相关联的 Class 对象。
className是类的完整名称(带包名)
static Class<?>
forName(String name, boolean initialize, ClassLoader loader)
使用给定的类加载器,返回与带有给定字符串名的类或接口相关联的 Class 对象。
Class<?>[]
getClasses()
返回一个包含某些 Class 对象的数组,这些对象表示属于此 Class 对象所表示的类的成员的所有公共类和接口。
ClassLoader
getClassLoader()
返回该类的类加载器。
Constructor<T>
getConstructor(Class<?>... parameterTypes)
返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
Constructor<?>[]
getConstructors()
返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。
Field
getField(String name)
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Field[]
getFields()
返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。
Class<?>[]
getInterfaces()
确定此对象所表示的类或接口实现的接口。
Method
getMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Method[]
getMethods()
返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。
int getModifiers()
返回此类或接口以整数编码的 Java 语言修饰符。
String
getName()
以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
Package
getPackage()
获取此类的包。
boolean isPrimitive()
判定指定的 Class 对象是否表示一个基本类型。
String
toString()
将对象转换为字符串。
boolean isArray()
判定此 Class 对象是否表示一个数组类。
TypeVariable<Class<T>>[] getTypeParameters()
按声明顺序返回 TypeVariable 对象的一个数组,这些对象表示用此 GenericDeclaration 对象所表示的常规声明来声明的类型变量。
暴力反射
Annotation[]
getDeclaredAnnotations()
返回直接存在于此元素上的所有注释。
Class<?>[]
getDeclaredClasses()
返回 Class 对象的一个数组,这些对象反映声明为此 Class 对象所表示的类的成员的所有类和接口。
Constructor<T>
getDeclaredConstructor(Class<?>... parameterTypes)
返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。
Constructor<?>[] getDeclaredConstructors()
返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。
Field
getDeclaredField(String name)
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
Field[]
getDeclaredFields()
返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
Method
getDeclaredMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
Method[]
getDeclaredMethods()
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
Class<?>
getDeclaringClass()
如果此 Class 对象所表示的类或接口是另一个类的成员,则返回的 Class 对象表示该对象的声明类。
<个人专属笔记> |