准备工作
public class Student { PRivate Integer id; private String name; private Integer age; public Student(Integer id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; System.out.println(toString()); } public Student() { super(); System.out.println(toString()); } public static void as(){} private void sa(){} public void show(){ System.out.println("show"); } public void show(String id){ System.out.println("show"+id); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "[id=" + id + ", name=" + name + ", age=" + age + "]"; }}测试类
public class reflectTest { public static void main(String[] args) throws Exception { reflectCon(); } //获取Class public void reflectClass() throws Exception{ /** * 第一种 */ Student stu = new Student(); Class clazz1 = stu.getClass(); /** * 第二种 */ Class clazz2 = Student.class; /** * 第三种、 * 找寻该类名称类文件,并加载进内存,并产生Class对象 */ Class clazz3 = Class.forName("test.Student");//得到该类的字节码文件 参数必须是类全名 Constructor c = clazz3.getConstructor(Integer.class, String.class, Integer.class); c.newInstance(16,"wqwqw",23); } //获取构造器 public static void reflectCon() throws Exception{ //无参构造器 Class clazz2 = Class.forName("test.Student");//得到该类的字节码文件 参数必须是类全名 Object obj1 = clazz2.newInstance(); //有参构造器 Class clazz3 = Class.forName("test.Student");//得到该类的字节码文件 参数必须是类全名 Constructor c = clazz3.getConstructor(Integer.class, String.class, Integer.class); Object obj2 = c.newInstance(16,"wqwqw",23); } //得到字段 取值并赋值 public static void reflectFiled() throws Exception{ Class clazz = Class.forName("test.Student");//得到该类的字节码文件 Object obj = clazz.newInstance();//实例化对象 Field filed = clazz.getDeclaredField("age");//得到指定字段 getDeclaredFields得到全部字段 filed.setaccessible(true);//强制访问 什么字段都能访问 //getFields得到公共字段 filed.set(obj, 12);//赋值 Object value = filed.get(obj);//取值 System.out.println(value); Field[] fileds = clazz.getFields(); for(Field f : fileds){ System.out.println(f); } Field[] fileds1 = clazz.getDeclaredFields(); for(Field f : fileds1){ System.out.println(f); } } //得到方法 并执行方法 public static void reflectMethod() throws Exception{ Class clazz = Class.forName("test.Student");//得到该类的字节码文件 Object obj = clazz.newInstance();//实例化对象 Method[] method = clazz.getMethods();//得到所有连父类的除私有的方法 for(Method m : method){ System.out.println(m); } System.out.println("-------------------------------------------------------------"); Method[] method1 = clazz.getDeclaredMethods();//得到所有本地的方法 for(Method m : method1){ System.out.println(m); } //得到指定的方法 Method m = clazz.getMethod("show", String.class);//第一个参数是方法名 第二个参数是方法的参数类型 m.invoke(obj, "12");//执行方法 第一个参数是执行该方法的对象 第二个参数是传给方法的实参 }}新闻热点
疑难解答