一文详解Java中的反射api

 更新时间:2025年02月05日 09:01:04   作者:会说法语的猪  
这篇文章主要为大家详细介绍了Java中的6个反射api,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下

1. 调用无参数构造器得到一个类的对象返回

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 定位无参构造器对象
    Constructor constructor = c.getDeclaredConstructor();
    // 暴力打开私有构造器的访问权限(如果是私有构造器、private 就可以使用setAccessible暴力打开)
    constructor.setAccessible(true);
    // 通过无参数构造器初始化对象返回
    Person person = (Person) constructor.newInstance();
    System.out.println(person);
}

2. 调用有参数构造器得到一个类的对象返回

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 定位无参构造器对象
    Constructor constructor = c.getDeclaredConstructor(String.class, Integer.class, String.class);
    // 暴力打开私有构造器的访问权限(如果是私有构造器、private 就可以使用setAccessible暴力打开)
    // constructor.setAccessible(true);
    // 通过无参数构造器初始化对象返回
    Person person = (Person) constructor.newInstance("WFT", 18, "1.88");
    System.out.println(person);
}

3. 获取全部的成员变量

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取全部声明的成员变量对象
    Field[] fields = c.getDeclaredFields();
    for (Field field : fields) {
        System.out.println(field.getName() + "-->>" + field.getType());
    }
}

4. 获取某个成员变量 并为其赋值

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取全部声明的成员变量对象
    Field nameField = c.getDeclaredField("name");
    System.out.println(nameField.getName() + "--->>" + nameField.getType());
    Person person = new Person();
    nameField.setAccessible(true); // 因为是私有属性 采用暴力反射!
    /**
     * 参数1:被赋值的对象
     * 参数2:该成员变量的值
     */
    nameField.set(person, "王大锤");
    System.out.println(person);
    /**
     * 获取改成员变量的值
     */
    String name = nameField.get(person) + "";
    System.out.println(name);
}

5. 获取所有的methods方法

public static void main(String[] args) {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取所有的方法
    Method[] methods = c.getDeclaredMethods();
    // 遍历看一下
    for (Method method : methods) {
        // 方法名称 参数个数 返回值类型
        System.out.println(method.getName() + "->" + method.getParameterCount() + "->" + method.getReturnType());
    }
}

6.  获取某个methods方法并执行

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取setName方法
    Method setName = c.getDeclaredMethod("setName", String.class);
    // 调用方法
    Person person = new Person();
    Object o = setName.invoke(person, "WFT"); // 如果方法没有返回值  返回值为null
    System.out.println(o);
    System.out.println(person);
}

到此这篇关于一文详解Java中的反射api的文章就介绍到这了,更多相关Java反射api内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java UUID 五个版本的区别及使用场景小结

    Java UUID 五个版本的区别及使用场景小结

    在Java中,UUID是一个128位的唯一标识符,广泛应用于生成唯一标识符、分布式系统唯一键等场景,Java提供的java.util.UUID类支持五种UUID版本,每种具有不同的生成方式和使用场景,本文就来介绍一下如何使用,感兴趣的可以了解一下
    2024-11-11
  • System.currentTimeMillis()计算方式与时间的单位转换详解

    System.currentTimeMillis()计算方式与时间的单位转换详解

    这篇文章主要介绍了System.currentTimeMillis()计算方式与时间的单位转换详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • JAVA中static方法的用法实例详解

    JAVA中static方法的用法实例详解

    这篇文章主要介绍了JAVA中static方法的用法,结合实例形式较为详细的分析了Java中static方法的功能、使用技巧与相关注意事项,需要的朋友可以参考下
    2015-12-12
  • Java使用Jsoup实现将浏览器书签HTML转换为JSON

    Java使用Jsoup实现将浏览器书签HTML转换为JSON

    这篇文章主要介绍了如何使用Jsoup和Fastjson2将浏览器导出的书签HTML文件解析为层级化的JSON结构,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下
    2026-01-01
  • Java中ArrayList单行初始化的多种方法

    Java中ArrayList单行初始化的多种方法

    在Java开发中,我们经常需要初始化列表,尤其是ArrayList,用于存储和管理数据,为了提高代码的简洁性和可读性,我们希望能在一行代码内完成ArrayList的初始化,本文将介绍多种在Java中单行初始化ArrayList的方法,需要的朋友可以参考下
    2025-07-07
  • 基于Java制作一个好玩的打飞机游戏

    基于Java制作一个好玩的打飞机游戏

    这篇文章主要介绍了基于Java制作的打飞机小游戏,这里整理了详细的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java获取classpath根路径的三种方法

    Java获取classpath根路径的三种方法

    本文介绍了在Java中获取classpath根路径的三种方法:ClassLoader.getResource、Class.getResource和System.getProperty,每种方法都有其适用场景,开发者可以根据具体需求选择合适的方法,需要的朋友可以参考下
    2026-01-01
  • MyBatis一级缓存与二级缓存原理与作用分析

    MyBatis一级缓存与二级缓存原理与作用分析

    mybatis-plus是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提高效率而生,这篇文章带你了解Mybatis的一级和二级缓存
    2022-12-12
  • 一文带你看懂Android动画的实现原理

    一文带你看懂Android动画的实现原理

    动画是 Android 应用程序中重要的交互特性,ndroid 提供了多种动画效果,包括平移、缩放、旋转和透明度等,它们可以通过代码或 XML 来实现,本文将介绍 Android 动画的原理和实现方法,并提供一些示例,需要的朋友可以参考下
    2023-07-07
  • 解决SpringSecurity 一直登录失败的问题

    解决SpringSecurity 一直登录失败的问题

    这篇文章主要介绍了解决SpringSecurity 一直登录失败的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论