Java反射之Field使用及说明

怼烎@ 2024-03-26 13:13 126阅读 0赞

Java反射之Field使用及说明

1、 什么是反射?

反射 的目的是为了能在运行期间得到对象的结构(包括成员变量,方法,构造方法等),并可以在允许的情况下访问这些属性和方法。
反射的优点很明显,就是能够在运行时动态获取类的实例,提高灵活性;可与动态编译结合。
但是使用反射会使得程序性能较低,因为需要解析字节码,将内存中的对象进行解析。

Java反射api:
Field 类:Java.lang.reflec包中的类,表示类的成员变量,可用来获取和设置类之中的属性值。
Method 类:Java.lang.reflec包中的类,表示类的方法,可用来获取类中的方法信息或者执行方法。
Constructor 类:Java.lang.reflec包中的类,表示类的构造方法。

Field

  1. 一切反射相关的代码都从获得类对象开始。
  2. 1) 先获取类对象,获取类对象后才可以获取到 Field 属性。
  3. 获取类对象的3种获取方式:
  4. 1、类名.class; // Class usr = User.class;
  5. 2、对象名.getClass(); //Class usr= user.getClass();
  6. 3Class.forName(全限定名/全路径名) //Class usr= Class.forName("com.reflect.entity.User");
  7. 2) 反射机制实例化对象
  8. User user= (User) usr.newInstance();
  9. 此外:
  10. 获取全限定名: usr.getName();
  11. 获取类名: usr.getSimpleName();
  12. 获取访问修饰符: usr.getModifiers();
  13. 获取包名 : usr.getPackage();

获取属性:

  1. 1)获取单个公共的属性 【非私有化】成员变量
  2. Field field = user.getClass().getField("age"); //获取类或接口的指定的已声明字段
  3. Field field = usr.getField("age");
  4. 2)获取单个公共的、私有的、最终的等等属性 【包括私有化】成员变量【暴力反射】
  5. //属性的访问修饰符1:代表public 2:代表private 0:代表没有修饰符
  6. Field field = user.getClass().getDeclaredField("age");
  7. Field field = usr.getDeclaredField("age");
  8. 3)获取所有公共的属性【只有非私有化的】【暴力反射】
  9. Field[] fields = usr.getFields(); //然后foreach
  10. 4)获取所有公共的、私有的、受保护的、最终的等等属性 【包括私有化】成员变量【暴力反射】
  11. Field[] fields = usr.getDeclaredFields();
  12. 5)获取K类父类
  13. Class clazz = req.getClass().getSuperClass();
  14. 6)获取属性名:field.getName();
  15. 7)获取属性类型: filed.getType();
  16. 8)获取属性访问修饰符 field.getModifiers();

获取方法:

  1. 1)获取单个公共的、私有的、最终的等等方法
  2. Method method = sysUser.getClass().getDeclaredMethod("setName", String.class);
  3. method.invoke(sysUser, "花和尚");//调用
  4. System.err.println(sysUser.getName());//打印结果:花和尚
  5. 2)获取所有公共的方法
  6. Method[] methods = user.getClass().getMethods(); //foreach
  7. 3)获取所有公共的、私有的、受保护的、最终的等等方法
  8. Method[] methods = user.getClass().getDeclaredMethods();

通过反射api操作属性

  1. SysUser u4 = sysUser.getClass().newInstance();
  2. Field f = sysUser.getClass().getDeclaredField("name");
  3. f.setAccessible(true);//表示不用不需要做安全检查了,可以直接访问。
  4. f.set(u4, "hhhh");//给哪个对象设置属性,通过反射直接写属性,这里不能访问私有属性会报错
  5. System.out.println(u4.getName());//通过反射直接读属性
  6. System.out.println(f.get(u4));//把f的值 获取到
  7. 打印结果:
  8. hhhh
  9. hhhh

发表评论

表情:
评论列表 (有 0 条评论,126人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java反射Field使用说明

    Java反射之Field使用及说明 1、 什么是反射? 反射 的目的是为了能在运行期间得到对象的结构(包括成员变量,方法,构造方法等),并可以在允许的情况下访问这些

    相关 Java反射 Field类详解

    Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。 Field 成员变量的介绍 每个成员变量有类型和值