<!--反射-------------> //java.lang.reflect //Java反射机制是在运行状态时,对于任意一个类,都能够直到这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。 Class clazz = this.getClass(); Field[] declaredFields = clazz.getDeclaredFields();//获取类自身声明的所有方法,包含public、protected和private方法 Method[] methods = clazz.getMethods();//获取类的所有共有方法,包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法 String name = clazz.getName(); String simpleName = clazz.getSimpleName(); Class<?> superclass = clazz.getSuperclass();//获得父类 Class<?> interfaces[] = clazz.getInterfaces(); Constructor<?> cons[] = clazz.getConstructors();//公共构造函数数组 Constructor<?> cons[] = clazz.getDeclaredConstructors();//所有的构造方法 Constructor<?> constructor = c.getConstructor(int.class);//只有使用类字面常量才能够获取基本类型的Class对象 UserInfo userInfo = (UserInfo) constructor.newInstance(1);//构造实例 //--------------------------- Class<?> clazz = this.getClass(); 1.得到要调用的类的class 2.得到要调用的类中的方法 3.方法调用invoke (不能使用包装类替换基本类型--NoSuchMethodException) Class cls = Class.forName("chb.test.reflect.Student"); Method m = cls.getDeclaredMethod("hi",new Class[]{int.class,String.class}); m.invoke(cls.newInstance(),20,"chb"); <!--静态方法调用,不必得到对象实例--> Class cls = Class.forName("chb.test.reflect.Student"); Method staticMethod = cls.getDeclaredMethod("hi",int.class,String.class); staticMethod.invoke(cls,20,"chb");//这里不需要newInstance <!--private成员变量需要设置允许访问--> (IllegalAccessException: Class *.TestClass can not access a member of class *.Student with modifiers "private" ) Class cls = Class.forName("chb.test.reflect.Student"); Object student = cls.newInstance();//得到一个实例 Field field = cls.getDeclaredField("age"); field.setAccessible(true);//设置允许访问 field.set(student, 10); System.out.println(field.get(student));
<!--反射-------------> //java.lang.reflect //Java反射机制是在运行状态时,对于任意一个类,都能够直到这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。 Class clazz = this.getClass(); Field[] declaredFields = clazz.getDeclaredFields();//获取类自身声明的所有方法,包含public、protected和private方法 Method[] methods = clazz.getMethods();//获取类的所有共有方法,包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法 String name = clazz.getName(); String simpleName = clazz.getSimpleName(); Class<?> superclass = clazz.getSuperclass();//获得父类 Class<?> interfaces[] = clazz.getInterfaces(); Constructor<?> cons[] = clazz.getConstructors();//公共构造函数数组 Constructor<?> cons[] = clazz.getDeclaredConstructors();//所有的构造方法 Constructor<?> constructor = c.getConstructor(int.class);//只有使用类字面常量才能够获取基本类型的Class对象 UserInfo userInfo = (UserInfo) constructor.newInstance(1);//构造实例 //--------------------------- Class<?> clazz = this.getClass(); 1.得到要调用的类的class 2.得到要调用的类中的方法 3.方法调用invoke (不能使用包装类替换基本类型--NoSuchMethodException) Class cls = Class.forName("chb.test.reflect.Student"); Method m = cls.getDeclaredMethod("hi",new Class[]{int.class,String.class}); m.invoke(cls.newInstance(),20,"chb"); <!--静态方法调用,不必得到对象实例--> Class cls = Class.forName("chb.test.reflect.Student"); Method staticMethod = cls.getDeclaredMethod("hi",int.class,String.class); staticMethod.invoke(cls,20,"chb");//这里不需要newInstance <!--private成员变量需要设置允许访问--> (IllegalAccessException: Class *.TestClass can not access a member of class *.Student with modifiers "private" ) Class cls = Class.forName("chb.test.reflect.Student"); Object student = cls.newInstance();//得到一个实例 Field field = cls.getDeclaredField("age"); field.setAccessible(true);//设置允许访问 field.set(student, 10); System.out.println(field.get(student));