目录
- 测试基础实体类
- 获取Class的三种方式
- 获取fields,methods,constructors
- 获取某一个field或mehtod,constructor
- 根据clazz获取实例对象
- Field常用操作方法
- method 相关操作
- constructor相关操作
测试基础实体类
public class UserFather {
public String fatherName;
private String fatherPassword;
省略:get和set.......
}
public class User extends UserFather {
private String userName;
private String password;
private Integer age;
省略:get和set.......
}
获取Class的三种方式
//1.类名.class()
Class<User> userClass1 = User.class;
//2.Class.forName("类的全路径")
Class<?> userClass2 = Class.forName("com.blog.reflect.test.User");
//3.对象.getClass()
Class<? extends User> userClass3 = new User().getClass()
获取fields,methods,constructors
构造方法是不能被继承的。
Field[] fields = clazz.getFields();//获取的是本类及其继承的父类的所有非private的属性
Field[] declaredFields = clazz.getDeclaredFields(); //获取的是本类所有声明的属性包括public,private.....
Method[] methods = clazz.getMethods();//获取的是本类及其继承的父类的所有非private的方法
Method[] declaredMethods = clazz.getDeclaredMethods();//获取的是本类所有声明的方法包括public,private.....
Constructor<?>[] constructors = clazz.getConstructors(); //获取的是本类及其继承的父类的所有非private的构造方法
Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors(); //获取的是本类所有的构造方法
获取某一个field或mehtod,constructor
Field fatherName = clazz.getField("fatherName");//获取的是本类及其继承的父类的指定名称的非private的属性
Field userName = clazz.getDeclaredField("userName");//获取的是本类指定属性包括public,private.....
Method getFatherName = clazz.getMethod("getFatherName", null);//同上
Method getAge = clazz.getDeclaredMethod("getAge", null);//同上
Method setAge = clazz.getDeclaredMethod("setAge", Integer.class);//获取set方法
Method setUserName = clazz.getDeclaredMethod("setUserName", String.class);//获取set方法
Constructor<User> constructor = clazz.getConstructor(String.class);//同上
Constructor<User> declaredConstructor = clazz.getDeclaredConstructor(String.class);//同上
根据clazz获取实例对象
clazz.newInstance();
Field常用操作方法
Class<User> clazz = User.class;
Field field = clazz.getDeclaredField("userName");
field.getName();//userName
field.getType();//class java.lang.String
field.isAccessible();
field.setAccessible(true);
User user = clazz.newInstance();
field.set(user, "张三");//设置字段值
Object o = field.get(user);//获取字段值
System.out.println(o);
method 相关操作:
method.invoke(clazz.newInstance(), "NAME1", "name2");
method.getName();
constructor相关操作
Class<User> clazz = User.class;
clazz.newInstance();//调用无参构造方法创建实例
clazz.getDeclaredConstructor(String.class).newInstance("张三");
clazz.getDeclaredConstructor().newInstance();//调用无参构造方法创建实例