java中的反射

java中的反射

能够分析信息的能力叫反射

1.获取类的方法

  1. Class.forName(路径)
    
  2. 类.class
    
  3. 对象.getClass()
    

2.类对象常用功能

一、构造方法

  1. 获取指定的公共构造器

    1. 获取构造方法 getConstructor()可以根据构造方法参数类型的不同,传入对应的类对象,即可获得指定的构造方法
    2. 创建对象 newInstance()
    3. 如果使用无参构造方法,此操作可以简化:类对象.newInstance() 来创建
  2. 获取指定的所有构造器(公共+非公共)

    • getDeclaredConstructor()
  3. 获取所有的公共构造方法

    • getConstructors

      // 反射获取Class对象
      Class c = Class.forName("demo0425.Person");
      // 获得所有构造方法
      Constructor[] constructors = c.getConstructors();
      for (Constructor constructor : constructors) {
          System.out.println(constructor);
      }
      
  4. 获取所有的构造方法(公共+非公共)

    • getDeclaredConstructors()

二、成员变量

  1. 获取指定公共成员变量

    • getField()
    • field.set(Object obj,Object value)
    • field.get(Object obj)
    Person o = new Person();
    Class c1 = Class.forName("demo0425.Person");
    System.out.println("====获取指定字段=");
    Field field = c1.getField("name");
    field.set(o, "Jerry");
    System.out.println(field.get(o));
    
  2. 获取指定所有成员变量(公共+非公共)

    • getDeclaredField()

      System.out.println("====获取私有字段=");
      Field field2 = c1.getDeclaredField("age");// 获得私有字段
      // 设置私有字段可访问
      field2.setAccessible(true);
      field2.set(o, 25);
      System.out.println(field2.get(o));
      
  3. 获取所有公共的成员变量

    • getFields()

      System.out.println("======获取所有字段,不包括私有字段=");
      Field[] fields = c1.getFields();
      for (Field field1 : fields) {
          System.out.println(field1);
      }
      
  4. 获取所有成员变量(公共+非公共)

    • getDeclaredFields()

    • 非公共需要使用setAccessible(true);

      System.out.println("======获取所有字段,包括私有字段===========");
      Field[] declaredFields = c1.getDeclaredFields();
      for (Field declaredField : declaredFields) {
          System.out.println(declaredField);
      }
      

三、方法

  1. 获取指定公共方法

    • getMethod()
    • 根据方法名获取以及参数类型对应的类对象来指定获得
    • 调用方法invoke(Object obj,Object… args)
  2. 获取所有公共方法

    • getMethods()
  3. 获取指定方法(公共+非公共)

    • getDeclaredMethod()
  4. 获取所有方法(公共+非公共)

    • getDeclaredMethods()

注意:非公共使用时需要使用:setAccessible(true)

posted @   ning12  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示