Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

How to use Java reflection

2025-04-06 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >

Share

Shulou(Shulou.com)06/02 Report--

这篇文章将为大家详细讲解有关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反射如何使用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Development

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report