import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class FanShe {
public static void main(String[] args) throws Exception {
// 创建class类实例,常用的有三种方法
Class<?> clazz1 = Person.class;
// Class<?> clazz2 =Class.forName("包名.类名"); //有异常
// Class<?> clazz3 =new Person().getClass();
// 创建运行时类的实例,如果包含无参构造器
Object ob1 = clazz1.newInstance();
// 创建运行时类的实例,如果没有无参构造器
Constructor<?> con = clazz1.getConstructor(int.class, String.class);
// Object ob2 =con.newInstance(2,"zhangsan"); //形参还可以用new class[]{int.class,String.class}
// 调用指定的属性,如果是public修饰的
Field filed1 = clazz1.getField("number");
System.out.println(filed1.get(ob1));
// 调用指定的属性,如果不是public修饰的
Field filed2 = clazz1.getDeclaredField("age");
// 拼凑方法名,get()方法
String filed = "age";
String getField = "get" + String.valueOf(filed.charAt(0)).toUpperCase() + filed.substring(1);
System.out.println(getField);
// 拼凑方法名,set()方法
String setField = "set" + filed.toUpperCase().charAt(0) + filed.substring(1);
System.out.println(setField);
// 调用指定的方法
Method method1 = clazz1.getDeclaredMethod("setAge", new Class[] { int.class });
method1.invoke(ob1, 20);
Method method2 = clazz1.getDeclaredMethod(getField);
System.out.println(method2.invoke(ob1));
// 如果调用的方法没有返回值,则打印结果除了方法体里的打印内容外,还会打印null
// 如果有返回值,则会把null替换成相应的返回值
}
}
public class Person {
public int number =20;
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public Person() {
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int speak(){
System.out.println("我是一个人");
return 1;
}
}