反射的方法
反射的一些方法
-
获取类的信息
- Class.forName("类路径");
- 对象.class();
- 对象名.getClass();
-
必须实例化类的信息
-
类名.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());
-
-
获取已知类的父类对象,实现类接口
- 类对象.getSuperClass();
- 类对象.getInterfaces();
-
类属性的操作
-
对象.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());
-

浙公网安备 33010602011771号