.反射操作 字段:getField(String name )直接获取名称 使用 get(Object obj)获取值 使用 set(Object obj,Value)设置值时需要对象也需要传入值 方法:getMethod(String name, Class ... clazz 参数类型)方法既需要方法名称也需要方法类型 使用invoke(Objectobj,Value...)需要对象,而且要传入参数值才能调用方法 构造函数:getConstructor(Class... clazz) 构造方法不需要对象,只需要参数类型列表就能确定构造函数 使用newInstance(Object... obj)实例化一个对象 package com.itheima; importjava.lang.reflect.Constructor; importjava.lang.reflect.Field; importjava.lang.reflect.Method; public class 反射操作 { public static void main(String[] args){ Class clazz= Teacher2.class; try { Constructor con=clazz.getConstructor(String.class); Teacher2te=(Teacher2)con.newInstance("Hei"); Fieldfield=clazz.getDeclaredField("name"); field.setAccessible(true); String name=(String)field.get(te); System.out.println("原来的值:"+te); field.set(te, "123"); System.out.println("更改后的值:"+te); Method method=clazz.getMethod("print", String.class); method.invoke(te, "345"); } catch (Exception e) { // TODO Auto-generated catchblock e.printStackTrace(); } } } class Teacher2{ private String name; public Teacher2(String name) { super(); this.name = name; } public void print(String str){ System.out.println("教师名称:"+name+"\r\n 输入值:"+str); } @Override public String toString() { return "Teacher2[name=" + name + "]"; } }
|