千家信息网

Java反射如何使用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关Java反射如何使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。反射相信刚接触Java的,第一句肯定会问什么是反射呢?反射有什么作用呢
千家信息网最后更新 2026年11月02日Java反射如何使用

这篇文章将为大家详细讲解有关Java反射如何使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    反射

    相信刚接触Java的,第一句肯定会问什么是反射呢?反射有什么作用呢?为什么使用反射呢?首先反射是Java的特征之一,项目中Java程序在运行的过程中,自动去识别并创建对应的类,能够动态的调用类的属性、构造方法、类中的方法。一句话描述:在程序中能动态调用不同的类和属性,去执行特定的操作。

    正因为反射能够在运行时动态加载需要的对象,所以很多框架中都使用到了反射。本次为了大家很好的理解反射,将基于反射创建对象、获取反射中的对象、获取类中属性、获取类中的构造方法、获取类中方法几个方面进行介绍,下面开始进入正题。

    基础数据准备

    为了方便演示,创建了一个基础的对象类。并基于他进行本次的介绍。创建的演示类JueJinUser如下,包含四个属性,分别有get和set方法,还有toString方法,没有创建构造方法,下面会介绍通过反射自动创建的相关反射的方法。

    public class JueJinUser {    private Integer id;    private String name;    private String title;    private Integer age;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    @Override    public String toString() {        return "JueJinUser{" +                "id=" + id +                ", name='" + name + '\'' +                ", title='" + title + '\'' +                ", age=" + age +                '}';    }}

    基于反射创建对象

    基于反射创建类对象主要有两种方式:第一种是通过类对象的newInstance()方法创建对象,第二种是通过构造器中的 newInstance()方法创建对象。

    类对象的newInstance()方法

      类对象的newInstance()方法创建方法如下:

       Class class = JueJinUser.class;       JueJinUser jueJinUseByClass = (JueJinUser) class.newInstance();

    构造器的newInstance()方法

    Class jueJinUserClass = JueJinUser.class;        Constructor constructor = jueJinUserClass.getConstructor();        JueJinUser jueJinUserByConstructor = (JueJinUser) constructor.newInstance();

    需要注意的是,两种创建方式中第一种基于类对象的newInstance()的方法只能是无参构造方法,而第二种基于构造器的 newInstance()方法可以有有参构造方法和无参构造方法,比较灵活。

    获取反射中的对象

    获取反射对象的方式有三种,分别是:Class.forName、.class 方法和getClass() 方法。获取反射中对象的方法大家在项目中使用的还是比较多的,相信大家都不陌生。

    Class.forName

    Class clzForName = Class.forName("com.example.demo.module.JueJinUser");

    .class 方法

    Class clzForClass =JueJinUserString.class;

    getClass() 方法

    JueJinUser JueJinUser = new JueJinUser();    Class clzNewObject = str.getClass();

    获取类中属性

    通过getFields和getDeclaredFields的方法,可以获取类中的属性信息,其中getFields可以获取类中的公有属性值,而getDeclaredFields的方法,获取所有类中的属性信息,但是无法获取到父类的信息。格式如下:

    Class clz = JueJinUser.class;        Field[] fields = clz.getFields();        System.out.println("--- getFields start ---");        for (Field field : fields) {            System.out.println(field.getName());        }        System.out.println("--- getFields end ---");        System.out.println("--- getDeclaredFields start ---");        Field[] declaredFields = clz.getDeclaredFields();        for (Field field : declaredFields) {            System.out.println(field.getName());        }        System.out.println("--- etDeclaredFields end ---");

    获取类中的构造方法

    通过getConstructors和getDeclaredConstructors的方法,可以获取类中的构造方法信息,其中getConstructors可以获取类中构造方法,而getDeclaredConstructors的方法,获取所有类中的构造方法,但是无法获取到父类的构造方法信息。格式如下:

     System.out.println("--- getConstructors start ---");        Constructor[] constructors = clz.getConstructors();        for (Constructor constructor : constructors) {            System.out.println(constructor.getName());        }        System.out.println("--- getConstructors end ---");        System.out.println("---getDeclaredConstructors start---");        Constructor[] declaredConstructors = clz.getDeclaredConstructors();        for (Constructor constructor : declaredConstructors) {            System.out.println(constructor.getName());        }        System.out.println("---getDeclaredConstructors end---");

    获取类中方法

    通过getMethods和getDeclaredMethods的方法,可以获取类中的构造方法信息,其中getMethods可以获取类中构造方法,而getDeclaredMethods的方法,获取所有类中的方法,但是无法获取到父类的方法信息。格式如下:

     System.out.println("--- getMethods start ---");        Method[] methods = clz.getMethods();        for (Method method : methods) {            System.out.println(method.getName());        }        System.out.println("--- getMethods end ---");        System.out.println("--- getDeclaredMethods start---");        Method[] declaredMethods = clz.getDeclaredMethods();        for (Method method : declaredMethods) {            System.out.println(method.getName());        }        System.out.println("--- getDeclaredMethods end ---");

    关于"Java反射如何使用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    方法 反射 对象 属性 信息 动态 方式 格式 篇文章 构造器 基础 更多 程序 项目 演示 运行 不同 不错 实用 陌生 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 互联网科技工作委员会主任 西安互联网科技 亿策互联网科技 极限挑战互联网科技 互联网 视角下的科技创新 互联网前沿科技 互联网金融和金融科技 人人互联网科技是培训 成都仁贤领冠互联网科技有限公司 银川新华互联网科技学校地址 博兴的互联网电子科技公司 东莞新华互联网科技学校 无锡工业互联网科技有限公司 普陀区互联网教育科技管理办法 互联网公司属于科技吗 西安左小互联网科技有限公司 美国五大互联网科技公司市值多少 互联网时代高科技布局 唐山双旺合互联网科技产业园 互联网与科技发展 互联网科技的 新华互联网科技2019 佳云科技和互联网广告 互联网公司科技股 和信科技工业互联网 注册互联网科技公司经营范围大全 深圳互联网科技的发展 智帮互联网科技公司最近动向 广州梦谷互联网科技有限公司领导
    0