反射:
public class User {
public String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public User() {
}
private void run() {
System.out.println("我会跑");
}
private void run(String name) {
System.out.println(name + "我会跑");
}
public void say() {
System.out.println("我会说话");
}
public static void main(String[] args) throws ClassNotFoundException,
NoSuchFieldException, SecurityException, NoSuchMethodException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException, InstantiationException {
// 加载这个类的class文件
Class c = Class.forName("com.sxt.User");
// 创建一个实例化的对象
User u = (User) c.newInstance();
// 类的全路径
System.out.println(c.getName());
// 类的名称
System.out.println(c.getSimpleName());
// 返回类的权限
System.out.println(Modifier.toString(c.getModifiers()));
// 判断是否是接口
System.out.println(c.isInterface());
// 拿到父类的全称
System.out.println(c.getSuperclass().getName());
// 父类的名字
System.out.println(c.getSuperclass().getSimpleName());
// 获取类中的public的属性
Field f = c.getField("name");
System.out.println(f.getName());
// 获取所有权限类型的属性
Field age = c.getDeclaredField("age");
System.out.println(age.getName());
// 获取所有public的属性
Field[] fs = c.getFields();
// 获取所有类型的所有属性
Field[] dfs = c.getDeclaredFields();
System.out.println(dfs.length);
System.out
.println("======================================================");
// 获取所有公共方法包含父类和接口
Method[] ms = c.getMethods();
for (Method m : ms) {
System.out.println(m.getName());
}
System.out
.println("======================================================");
// 通过方法名获取公共方法
Method m = c.getMethod("say");
System.out.println(m.getName());
System.out
.println("======================================================");
// 获取所有本类的方法
Method[] bms = c.getDeclaredMethods();
for (Method bm : bms) {
System.out.println(bm.getName());
}
System.out
.println("======================================================");
// 通过名字获取本类的方法
Method bm = c.getDeclaredMethod("run");
System.out.println(bm.getName());
// 调用本类的带参数的方法
Method cm = c.getDeclaredMethod("run", String.class);
cm.invoke(u, "张三");
}
}