反射描述
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
获取Class对象的3种方式
//1 通过类型获得 Class clazz1 = Bean.class; //2 通过实例对象获得 Bean bean = new Bean(); Class clazz2 = bean.getClass(); //3 通过字符串获得 // 语法:Class.forName("全限定类名") Classclazz3 = Class.forName("com.itheima_00_Bean.Bean");
获取Constructor对象的方式以及利用构造器对象创建对象
//获取共有构造器对象----通过构造器对象创建对应的对象 Constructor<Student> constructor1 = stuClz.getConstructor(); Student student1 = constructor1.newInstance(); Constructor<Student> constructor2 = stuClz.getConstructor(String.class, String.class); Student zs = constructor2.newInstance("1", "张三"); //获取私有构造器对象----通过构造器对象创建对应的对象 Constructor<Student> constructor = stuClz.getDeclaredConstructor(String.class); constructor.setAccessible(true); Student student = constructor.newInstance("老李");
获取Field对象然后获取字段对象的值
Student student = new Student(); Class<? extends Student> stuClz = student.getClass(); //获取公有Field对象 Field idField = stuClz.getField("id"); idField.set(student,"10");//设置student对象的id字段值 idField.get(student);//获取student对象的id字段值 //获取私有Field对象 Field nameField = stuClz.getDeclaredField("name"); nameField.setAccessible(true); nameField.set(student,"张三"); nameField.get(student);
获取Method对象然后通过方法对象调用XX对象的方法
Student student = new Student(); Class<? extends Student> stuClz = student.getClass(); //获取公有Method对象 Method eatMethod = stuClz.getMethod("eat", String.class); eatMethod.invoke(student,"肉"); //获取私有Method对象 Method sleepMethod = stuClz.getDeclaredMethod("sleep"); sleepMethod.setAccessible(true); sleepMethod.invoke(student)