1 反射
正在运行程序 动态获取这个类的所有信息。
2 反射创建对象的方式
Class userClass = Class.forName("com.yibaomd.reflect.TUser");
TUser user = (TUser) userClass.newInstance();
Constructor constructor = userClass.getConstructor(String.class,String.class);
TUser user = (TUser) constructor.newInstance("1","2");
System.out.println(user.getUserName());
System.out.println(user.getAge());
3 反射获取字段
//获取当前类的所有属性不包括父类属性
Field[]fields = userClass.getDeclaredFields();
for(int i = 0; i < fields.length; i++){
Field field = fields[i];
System.out.println(field.getName());
}
//获取指定字段
Field field = userClass.getDeclaredField("id");
field.set(user, 1);
System.out.println(user.getId());
field = userClass.getDeclaredField("age");
//如果字段是私有的不管是读值还是写值,都必须先调用setAccessible=true方法
field.setAccessible(true);
field.set(user, "age");
System.out.println(user.getAge());
4获取注解
//获取类上的注解
SetTable setTableAno = (SetTable) anoClass.getAnnotation(SetTable.class);
Field[] fields = anoClass.getDeclaredFields();
for(Field field: fields){
//判断是否包含这个注解
if(field.isAnnotationPresent(SetField.class)){
//获取属性注解
SetField setField = field.getAnnotation(SetField.class);
buf.append(" " + setField.name());
}
}