【Java高级】利用反射机制获取类的所有信息

news2024/11/19 6:19:59

文章目录

  • 1.相关准备
  • 2.导航图
  • 3. 相关的方法
    • ----------------------------------------------类------------------------------------------------------
      • 1 类的修饰符
      • 2 类名
    • -----------------------------------------------属性-----------------------------------------------------
      • 3. 属性修饰符 4. 属性类型 5.属性名字
    • ----------------------------------------------构造方法---------------------------------------------
      • 6.构造方法修饰符 7.构造方法名字
      • 8 构造方法参数类型 9.构造方法参数名
    • ----------------------------------------------普通方法---------------------------------------------
      • 10普通方法修饰符 11普通方法返回值类型 12普通方法名 13普通方法参数的修饰符 14普通方法名

1.相关准备

一个User类足以。

package com.sdnu.demo;

/**
 * 用户
 *
 * @author Beyong
 * @date 2024/03/23 19:48
 **/
public class User {
    String name;
    int age;
    public User() {
    }
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void method1(int id) {
        System.out.println("方法一:" + id);
    }
}

测试类

package com.sdnu.demo;

import java.lang.reflect.Modifier;

/**
 * 反射测试
 *
 * @author Beyong
 * @date 2024/03/23 19:47
 **/
public class Test {
    public static void main(String[] args){
        try{
            Class user = Class.forName("com.sdnu.demo.User");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.导航图

我们知道反射机制能帮助 我们操作字节码文件,所以如下将总结一些相关的方法去一一获取类的相关信息。
在这里插入图片描述

3. 相关的方法

注意小标题与方法的对应 。

----------------------------------------------类------------------------------------------------------

1 类的修饰符

int modifierNumber = user.getModifiers();
System.out.println(Modifier.toString(modifierNumber));

在这里插入图片描述

对象的getModifiers(),会返回一个数字,该数字代表一个修饰符,我们可以将该数字作为参数传给Modifier.toString(),这个方法会返回修饰符的字符串形式。

2 类名

这个没啥好说的。

-----------------------------------------------属性-----------------------------------------------------

方法作用
getField​(String name)返回 字段对象,该对象反映此 类对象表示的类或接口的指定公共成员字段。
getFields()返回一个包含 字段对象的数组, 字段对象反映此 类对象所表示的类或接口的所有可访问公共成员字段。
getDeclaredField​(String name)返回 字段对象,该对象反映此 类对象表示的类或接口的指定声明字段。
getDeclaredField​s()返回 字段对象的数组, 字段对象反映由此 类对象表示的类或接口声明的所有字段。
Field[] fields = user.getFields();
for(Field field : fields) {
  System.out.println(field);
}

在这里插入图片描述

Field[] fields = user.getDeclaredFields();
for(Field field : fields) {
  System.out.println(field);
}

在这里插入图片描述

System.out.println(user.getField("name"));

在这里插入图片描述

System.out.println(user.getDeclaredField("age"));

在这里插入图片描述

3. 属性修饰符 4. 属性类型 5.属性名字

Field[] fields = user.getDeclaredFields();
            for(Field field : fields) {
                System.out.println(field);//整个属性
                System.out.println(Modifier.toString(field.getModifiers()));//属性修饰符
                System.out.println(field.getName());//属性名字
                System.out.println(field.getType());//属性类型
                System.out.println(field.getType().getSimpleName());//属性类型简化
            }

在这里插入图片描述

----------------------------------------------构造方法---------------------------------------------

  Constructor[] declaredConstructors = user.getDeclaredConstructors();
  for(Constructor constructor : declaredConstructors) {
    System.out.println(constructor);
  }

在这里插入图片描述

6.构造方法修饰符 7.构造方法名字

for(Constructor constructor : declaredConstructors) {
 	System.out.println(constructor);
 	System.out.println(Modifier.toString(constructor.getModifiers()));
 	System.out.println(constructor.getName());
 }

在这里插入图片描述

8 构造方法参数类型 9.构造方法参数名

for(Constructor constructor : declaredConstructors) {
                Parameter[] parameters = constructor.getParameters();
                for(Parameter parameter : parameters) {
                    System.out.println("----------" + parameter);
                    System.out.println(parameter.getType());
                    System.out.println(parameter.getName());
                }
            }

在这里插入图片描述

----------------------------------------------普通方法---------------------------------------------

10普通方法修饰符 11普通方法返回值类型 12普通方法名 13普通方法参数的修饰符 14普通方法名

Method[] declaredMethods = user.getDeclaredMethods();
            for(Method method : declaredMethods) {
                System.out.println(method);
                System.out.println(Modifier.toString(method.getModifiers()));
                System.out.println(method.getReturnType());
                System.out.println(method.getName());
                Parameter[] parameters2 = method.getParameters();
                for(Parameter parameter : parameters2) {
                    System.out.println(parameter);
                    System.out.println(parameter.getType());
                    System.out.println(parameter.getName());
                }
            }

普通方法与构造方法类似,只是名字由constructor换成method。而且普通方法多了返回值类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1540193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FileZilla 链接服务器提示 20 秒连接超时

FileZilla 有个默认设置是如果 20 秒没有数据的话会自动中断链接。 Command: Pass: **************** Error: Connection timed out after 20 seconds of inactivity Error: Could not connect to server修改配置 这个配置是可以修改的,修改的步骤为: …

保研复习概率论1

1.什么是随机试验(random trial)? 如果一个试验满足试验可以在相同的条件下重复进行、试验所有可能结果明确可知(或者是可知这个范围)、每一次试验前会出现哪个结果事先并不确定,那么试验称为随机试验。 …

零基础机器学习(4)之线性回归的基本原理

文章目录 一、线性回归的基本原理1.相关与回归2.线性回归的原理分析①线性回归的一般公式②线性回归的损失函数③线性回归方程的参数求解方法A.最小二乘法B.梯度下降法 一、线性回归的基本原理 1.相关与回归 相关描述的是变量之间的一种关系。 从统计角度看,变量之…

数据可视化-ECharts Html项目实战(5)

在之前的文章中,我们学习了如何设置滚动图例,工具箱设置和插入图片。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢 数据可视化-ECharts…

OpenLayers基础教程——WebGLPoints中要素样式的设置方法解析

1、前言 前一篇博客介绍了如何在OpenLayers中使用WebGLPoints加载海量数据点的方法,这篇博客就来介绍一下WebGLPoints图层的样式设置问题。 2、样式运算符 在VectorLayer图层中,我们只需要创建一个ol.style.Style对象即可,WebGLPoints则不…

【QT+QGIS跨平台编译】之九十:【QGIS_Crashhandler+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、QGIS_Crashhandler介绍二、QGIS下载三、文件分析四、pro文件五、编译实践一、QGIS_Crashhandler介绍 QGIS_Crashhandler模块是QGIS中的一个重要组成部分,它提供了QGIS程序的错误崩溃处理与跟踪。 二、QGIS下载 QGIS网址: QGIS Source Download 获取最新版本的…

iOS UIFont-新增第三方字体

背景 在项目中添加三方字体,是在开发中比较常见的需求,每次新增字体,都会遗忘其中某个步骤,又要去百度一下才能把字体添加使用成功。每次这样有点浪费时间和打击自信,于是便想着,自己好好来理一理新增字体…

ubuntu arm qt 读取execl xls表格数据

一,ubuntu linux pc编译读取xls的库 1,安装libxls(读取xls文件 电脑版) 确保你已经安装了基本的编译工具,如gcc和make。如果没有安装,可以使用以下命令安装: sudo apt-update sudo apt-get install build-essentia…

康奋威科技邀您到场参观2024长三角快递物流展

参展企业介绍 杭州康奋威科技股份有限公司创立于2005年,由国家“万人计划”专家任天挺先生创立并担任法人,是一家专业从事智能装备研发与制造的国家级高新技术企业。专注于自动化控制、机械设计、信息化方面的技术研究,主要为太阳能光伏、智…

深入理解Redis的Sentinel机制

Sentinel简述 Sentinel为了解决什么问题? Sentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案。 我们知道Redis 的主从复制模式可以将主节点的数据改变同步给从节点,这样从节点就可以起…

C/C++之内存旋律:星辰大海的指挥家

个人主页:日刷百题 系列专栏:〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 🌎欢迎各位→点赞👍收藏⭐️留言📝 ​ ​ 一、C/C内存分布 我们先来了解一下C/C内存分配的几个区域,以下面的代码为例来看…

Cmake和opencv环境安装

1 Cmake下载及安装 Download CMake 根据需要下载,历史版本下载方法如下 CMake 的版本号中的后缀 "rc1" 和 "rc2" 表示 Release Candidate 1 和 Release Candidate 2,它们都是候选版本,用于测试新功能和修复 bug。通常情…

目标检测的指标评估

目标检测模型的评价指标主要用于衡量模型的性能,特别是它在定位和识别目标方面的准确性。以下是一些常见的评价指标: 1. 精确度 (Precision): 表示检测到的目标中,正确检测到的目标所占的比例。精确度高意味着模型产生的误报(错误…

精神暴力的来源与解药

导致人生病的,不仅是病毒或细菌,也有精神暴力。与病毒破坏物理肌体、摧毁生命不同,精神暴力是让人们在过度的自我狂热中燃尽自我、而毁灭自身的。 21世纪以来,精神方面的疾病越来越多,为什么这样呢?大的背景…

fiddler过滤器使用,隐藏图片、js、css请求

如果抓包过程中不想查看图片、js、css请求,或者只想抓某个ip或者某个网页下的请求,可以在过滤器中设置。 (1)没有开启过滤器 可以看出所有的请求都会抓取,cs、js、图片请求都有 (2)开启过滤器 …

代码随想录算法训练营Day55 ||leetCode 583. 两个字符串的删除操作 || 72. 编辑距离

583. 两个字符串的删除操作 这道题的状态方程比上一题简单一些 初始化如下 class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size() 1, vector<int>(word2.size() 1));for (int i 0; i < word1…

Kotlin零基础入门到进阶实战

教程介绍 Kotlin现在是Google官方认定Android一级开发语言&#xff0c;与Java100%互通&#xff0c;并具备诸多Java尚不支持的新特性&#xff0c;每个Android程序员必备的Kotlin课程&#xff0c;每个Java程序员都需要了解的Kotlin&#xff0c;掌握kotlin可以开发Web前端、Web后…

计算机网络:物理层下的传输媒体概览

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

基于springboot和vue的旅游资源网站的设计与实现

环境以及简介 基于vue, springboot旅游资源网站的设计与实现&#xff0c;Java项目&#xff0c;SpringBoot项目&#xff0c;含开发文档&#xff0c;源码&#xff0c;数据库以及ppt 环境配置&#xff1a; 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xf…

【暴刷力扣】11. 盛最多水的容器

11. 盛最多水的容器 题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xf…