方法调用
- 方法调用
public class ReflectDemo02 {
public static void main(String[] args) throws NoSuchMethodException,
SecurityException, InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
// 1 找到像
Class<Book> clazz1 = Book.class;
//为了简化调用无参数构造函数,可以直接调用像的方法
Book book=clazz1.newInstance();
System.out.println(book);
//自己调用: 1)那个对象 2)那个方法 3)传的参数
//book.setName("dasb");
//2 找到方法,因为方法存在重载
Method m1=clazz1.getDeclaredMethod("setName", String.class);
//3 调用方法
m1.invoke(book, "dasb");
//System.out.println(book);
Method m2=clazz1.getDeclaredMethod("getName");
String ret=(String) m2.invoke(book);
System.out.println(ret);
}
}
- 字段的取值和赋值
public class ReflectDemo02 { public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException { // 1 找到像 Class<Book> clazz1 = Book.class; //为了简化调用无参数构造函数,可以直接调用像的方法 Book book=clazz1.newInstance(); System.out.println(book); //2 找到字段 Field f1=clazz1.getDeclaredField("name"); //3 赋值:如果是对象类型 set(object,value),如果基本类型 setBoolean 等 f1.setAccessible(true); f1.set(book, "dasb"); //4 取值:对象类型调用 get,而基本类型 getBoolean System.out.println(f1.get(book)); } }