反射的定义:
将类的各个部分组成一个新的对象(Class 对象) 就是反射机制。如
类中的成员变量组成java.lang.reflect.Field对象
类中的构造方法组成java.lang.reflect.Constructor对象
类中的方法组成java.lang.reflect.Method对象
反射的优点:
反射是所有框架的灵魂 所有的框架都使用了反射技术。
在程序运行过程中,可以操作这些对象。
可以解耦,提高程序的可拓展性。
获取反射对象:
public static void main(String[] args) throws ClassNotFoundException {
//第一种
Student stu = new Student();
Class cla01 = stu.getClass();
System.out.println(cla01);
//第二种方式
Class cla02 = Student.class;
System.out.println(cla02);
//第三种方式
Class cla03 = Class.forName("com.stary.Student");
System.out.println(cla03);
}
注意:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
反射中常用的方法:
方法 | 介绍 |
getField(String name) | 获得某个公有的属性对象 |
getFields() | 获得所有公有的属性对象 |
getDeclaredField(String name) | 获得某个属性对象 |
getDeclaredFields() | 获得所有属性对象 |
getConstructor(Class...<?> parameterTypes) | 获得该类中与参数类型匹配的公有构造方法 |
getConstructors() | 获得该类的所有公有构造方法 |
getDeclaredConstructor(Class...<?> parameterTypes) | 获得该类中与参数类型匹配的构造方法 |
getDeclaredConstructors() | 获得该类所有构造方法 |
getMethod(String name, Class...<?> parameterTypes) | 获得该类某个公有的方法 |
getMethods() | 获得该类所有公有的方法 |
getDeclaredMethod(String name, Class...<?> parameterTypes) | 获得该类某个方法 |
getDeclaredMethods() | 获得该类所有方法 |