import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class ReflectionDemo { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Class studentClass = Class.forName("Student"); System.out.println("studentClass = "+studentClass); System.out.println("所有构造方法:"); Constructor[] constructors = studentClass.getDeclaredConstructors(); for (Constructor c : constructors) { System.out.println(c); } System.out.println("所有公有public构造方法:"); constructors = studentClass.getConstructors(); for (Constructor c : constructors) { System.out.println(c); } System.out.println("获取无参的构造方法:"); Constructor constructor = studentClass.getDeclaredConstructor(null); System.out.println(constructor); System.out.println("获取带string、int、string参数的构造方法,并使用:"); constructor = studentClass.getDeclaredConstructor(String.class, int.class, String.class); System.out.println(constructor); // 该构造方法是private,通过setAccessible(true)忽略访问修饰符 constructor.setAccessible(true); Object obj = constructor.newInstance("张三", 18, "male"); } } class Student { public Student() { System.out.println("public,无参数构造方法..."); } protected Student(String name) { System.out.println("protected,带string参数构造方法.. student名字是:"+name); } Student(String name, int age) { System.out.println("默认,带string、int参数构造方法.. student名字是:"+name+",年龄是:"+age); } private Student(String name, int age, String sex) { System.out.println("private,带string、int、string参数构造方法.. student名字是:"+name+",年龄是:"+age+",性别是:"+sex); } }
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; public class FieldDemo { public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException { Class personClass = Class.forName("Person"); System.out.println(personClass); System.out.println("获取所有字段:"); Field[] fields = personClass.getDeclaredFields(); for (Field f : fields) { System.out.println(f); } System.out.println("获取所有公有public字段:"); fields = personClass.getFields(); for (Field f : fields) { System.out.println(f); } System.out.println("获取某一字段,并调用:"); Field field = personClass.getDeclaredField("sex"); System.out.println(field); // Constructor constructor = personClass.getDeclaredConstructor(null); // Object person = constructor.newInstance(); Object person = personClass.getDeclaredConstructor(null).newInstance(); field.set(person, "male"); System.out.println(person); System.out.println("获取私有private字段,并调用:"); field = personClass.getDeclaredField("phoneNumber"); field.setAccessible(true); field.set(person, "13xxxxxxxxx"); System.out.println(person); } } class Person { public String name; protected int age; String sex; private String phoneNumber; public Person() { //empty } @Override public String toString() { return "Person [name = " + name + ", age = " + age + ", sex = " + sex + ", phoneNumber = " + phoneNumber + "]"; } }
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class MethodDemo { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Class teacherClass = Class.forName("Teacher"); System.out.println(teacherClass); System.out.println("获取所有方法:"); Method[] methods = teacherClass.getDeclaredMethods(); for (Method m : methods) { System.out.println(m); } System.out.println("获取所有公有public方法:"); methods = teacherClass.getMethods(); for (Method m : methods) { System.out.println(m); } System.out.println("获取某一方法:"); Method method = teacherClass.getDeclaredMethod("show1", String.class); System.out.println(method); Object object = teacherClass.getDeclaredConstructor(null).newInstance(); method.invoke(object, "jack"); method = teacherClass.getDeclaredMethod("show4", int.class); System.out.println(method); // 解除私有private限定 method.setAccessible(true); String str = (String) method.invoke(object, 20); System.out.println(str); } } class Teacher { public void show1(String name) { System.out.println("public, name = " + name); } void show2(String name, int age) { System.out.println("default, name = "); } protected void show3() { System.out.println("protected, empty param"); } private String show4(int age) { System.out.println("private, age = " + age); return "abc"; } }
参考:https://blog.csdn.net/a745233700/article/details/82893076