获取类的信息
必须实例化类的信息
类名.newInstance()
如果没有无参的构造方法会报错
// 第一种方式
Class c11 = Class.forName("com.lening.reflection.User");
// 第二种方式
/*User user = new User();
Class c2 = user.getClass();*/
// 第三种方式 类名.class 过去类的信息
Class c3 = User.class;
// newInstance() 是实例化对象
User user = (User) c3.newInstance();
//System.out.println(user.toString());
// 设置对象的属性
Field name = c3.getDeclaredField("name");
name.setAccessible(true);
name.set(user,"wen");
System.out.println(user.toString());
获取类对象的信息
类对象.getName() 获取属性的名字
类对象.getSimpleName() 获取本类的名称
类对象.getPackage() 获取类的包路径
包对象.getName() 获取包的路径
Class<User> c1 = User.class;
User user = c1.newInstance();
// 类.getName 获取类的全路径
System.out.println(c1.getName());
// 类.getClass 获取类的加载器
System.out.println(c1.getClass());
// 类.getSimpleName() 获取类的名字
System.out.println(c1.getSimpleName());
// 类.getPackage() 获取这个类的包路径 包对象.getName() 获取这个包的名字
System.out.println(c1.getPackage());
获取已知类的父类对象,实现类接口
类属性的操作
对象.getDeclaredField("属性名") 获取本类的属性
对象.getFields("属性名") 获取公共的属性+继承的属性
属性对象.getName() 获取属性的名字
属性对象.getType() 获取属性的类型
Modifier.toString(属性对象.getModifiers()) 获取属性的修饰符
转换成修饰符状态 如果不转会是数字Modifier.toString()
// 对属性的操作
User user = new User();
Class c1 = user.getClass();
// 类.getFieIds() 获取公共属性和继承的属性
//Field[] fields = c1.getFields();
// 类.getDeclaredField("属性名"); 获取本类中属性,然后set值 get值
Field name = c1.getDeclaredField("name");
/*name.setAccessible(true);
name.set(user,"wen");
System.out.println(user.toString());*/
// 属性对象.getName() 获取属性的名字
System.out.println(name.getName());
// 属性对象.getType() 获取属性的类型
System.out.println(name.getType());
// Modifier.toString(属性对象.getModifiers()) 获取属性的修饰符
// 转换成修饰符状态 如果不转会是数字Modifier.toString()
System.out.println(Modifier.toString(name.getModifiers()));
/*Field[] declaredFields = c1.getDeclaredFields();
for (Field declaredField : declaredFields) {
declaredField.setAccessible(true);
}
declaredFields[0].set(user,"王恩");
declaredFields[1].set(user,11);
declaredFields[2].set(user,175);
System.out.println(user.toString());*/
赋值,取值
如果是private的 需要在赋值和取值之前授权
属性.setAccessible(true);
类.getDeclaredConstructor(属性类型.class.....) 获取类的构造器
类.getMethods() 获取公共类的方法+继承类的方法
类.getDeclaredMethods() 获取本类中所有的方法
方法名.getReturnType() 获取方法的返回值类型
属性对象.getParameterTypes() 获取方法参数列表
// 通过反射调用方法
Class c1 = User.class;
// 每一步都需要实例化对象
User user = (User) c1.newInstance();
// 类.getDeclaredMethod("set属性",属性的.class) 获取本类的方法
Method setName = c1.getDeclaredMethod("setName", String.class);
setName.invoke(user,"王恩");
System.out.println(user.getName());
// 方法名.getReturnType() 获取返回值类型
System.out.println(setName.getReturnType());
通过反射invoke()方法来进行赋值运行。
// 通过反射调用方法
Class c1 = User.class;
// 每一步都需要实例化对象
User user = (User) c1.newInstance();
// 类.getDeclaredMethod("set属性",属性的.class) 获取本类的方法
Method setName = c1.getDeclaredMethod("setName", String.class);
setName.invoke(user,"王恩");
System.out.println(user.getName());
// 方法名.getReturnType() 获取返回值类型
System.out.println(setName.getReturnType());
原文:https://www.cnblogs.com/WangEn/p/14617178.html