1. 反射的定义
java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。
2. 定义反射的三种方式
1)Class.forName("全限定类名"); //将字节码加载进内存
2)类名.class
3) 对象.getClass()
3. Class类对象的常用方法
1)获取构造函数
//获取public的构造函数 Constructor[] constructors = studentClass.getConstructors(); //获取所有构造函数(可以获取到私有的构造) Constructor[] declaredConstructors = studentClass.getDeclaredConstructors(); //获取public的某一个构造函数(参数为:构造的参数Class对象) Constructor constructor1 = studentClass.getConstructor(int.class, String.class); //获取某一个构造函数(可以获取到私有的构造) Constructor constructor2 = studentClass.getDeclaredConstructor(int.class, String.class, String.class);//实例化一个对象 Object obj = constructor1.newInstance(20, "李四");//私有构造函数可以访问 constructor2.setAccessible(true);
2)获取成员变量
//获取public的成员变量 Field[] fields = studentClass.getFields(); //获取所有成员变量(包活私有的变量) Field[] declaredFields = studentClass.getDeclaredFields(); //获取某一个public的变量 Field sex = studentClass.getField("sex"); //获取某一个成员变量 Field name = studentClass.getDeclaredField("name");Student student = new Student(); //设置成员变量的值 sex.set(student, "男"); //获取成员变量的值 Object o = sex.get(student);//将private的属性设置为可访问,就可以进行获取和设置操作了 name.setAccessible(true);
3)获取成员方法
//获取public的方法 Method[] methods = studentClass.getMethods(); //获取所有方法 Method[] declaredMethods = studentClass.getDeclaredMethods(); //获取某个public的方法 Method test = studentClass.getMethod("test"); //获取方法 Method test2 = studentClass.getDeclaredMethod("test2");//执行方法 test.invoke(new Student()); //获取方法名 test.getName();
4)获取类名
studentClass.getName();
5) 无参构造实例对象
studentClass.newInstance();