Java高级之反射

关于反射的举例:
在这里插入图片描述

示例代码:Fan.java

package testFanShe;/*** @author: Arbicoral* @Description: 测试反射:*                  成员变量:2个public,2个private*                  构造器:4个public,2个private*                  成员方法:1个private,1个public*/
public class Fan {private String name;private int age;public String address;public String say;public Fan() {}private Fan(String name) {this.name = name;}public Fan(String address, String name) {this.address = address;this.name = name;}private Fan(boolean isMarried,String address){this.address=address;}public Fan(String name, int age) {this.name = name;this.age = age;}public Fan(String name, int age, String address, String say) {this.name = name;this.age = age;this.address = address;this.say = say;}public void show(){System.out.println("我是反射...");}private void run(){System.out.println("running...");}
}

通过反射获取 Fan.java中的成员变量、成员方法、构造器等成分。

TestFan.java

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;/*** @author: Arbicoral* @Description: 测试 Fan类*/
public class TestFan {private static Class<Fan> fanClass;public static void main(String[] args) throws Exception {// -------------- 一、获取Class对象的三种方式:Class对象---------------------// 方式 1.获取class对象fanClass = Fan.class;// 方式 2. 调用Class提供的方法:public static Class<?> forName(String className)Class<?> aClass = Class.forName("testFanShe.Fan");// 方式 3. Object提供的方法:public final native Class<?> getClass();// Class c3=对象.getClass();Fan fan = new Fan();Class<? extends Fan> aClass1 = fan.getClass();// -------------- 二、获取类的构造器:Constructor对象---------------------// 2.获取全部public构造器Constructor<?>[] constructors = aClass.getConstructors();for (Constructor constructor:constructors){// 获取构造器的名字和构造器中参数的个数System.out.println(constructor.getName()+"-->"+constructor.getParameterCount());}System.out.println("=============");// 3.获取所有构造器,无论是否是publicConstructor<?>[] declaredConstructors = fanClass.getDeclaredConstructors();for (Constructor dc:declaredConstructors){System.out.println(dc.getName()+"-->"+dc.getParameterCount());}System.out.println("********************");// 4. 根据参数获取public构造器Constructor constructor = fanClass.getConstructor(String.class, int.class);System.out.println(constructor.getName()+"-->"+constructor.getParameterCount());System.out.println("-----------------");// 5. 根据参数获取所有构造器,无论是否是publicConstructor<Fan> dc = fanClass.getDeclaredConstructor(boolean.class, String.class);dc.setAccessible(true);// dc.newInstance();System.out.println(dc.getName()+"-->"+dc.getParameterCount());System.out.println("********************");// -------------- 三、获取类的成员变量:Field对象---------------------// 获取全部public的成员变量Field[] fields = fanClass.getFields();for (Field f:fields){System.out.println(f.getName());}System.out.println("********************");// 获取所有的成员变量,无论是否是publicField[] declaredFields = fanClass.getDeclaredFields();for (Field f:declaredFields){System.out.println(f.getName());}// -------------- 四、获取类的成员方法:Method对象---------------------// 获取全部public的成员方法System.out.println("********************");Method[] methods = fanClass.getMethods();for (Member m:methods){System.out.println(m.getName());}System.out.println("********************");for (Method declaredMethod : fanClass.getDeclaredMethods()) {System.out.println(declaredMethod.getName());}}
}

总结:

反射的作用:

  1. 基本作用:可以得到一个类的全部成分,然后进行操作;
  2. 可以破坏封装性;
  3. 适合做Java框架,基本上,主流的框架都会基于反射设计一些通用的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Glide源码分析

一&#xff0c;Glide一次完整的加载流程 下面的流程图是一次完整的使用Glide加载图片流程,时序图 二&#xff0c;Glide重要的类图 三&#xff0c;Glide加载图片 流程图

【软件工程_UML—StartUML作图工具】startUML怎么画interface接口

StartUML作图工具怎么画interface接口 初试为圆形 &#xff0c;点击该接口在右下角的设置中->Format->Stereotype Display->Label&#xff0c;即可切换到想要的样式 其他方式 在class diagram下&#xff0c;左侧有interface图标&#xff0c;先鼠标左键选择&#xff0…

氟化钙光学窗口保护镜片 光学元件红外测温窗口保护片

氟化钙光学窗口保护镜片 光学元件红外测温窗口保护片 常见镜片材料 特此记录 anlog 2023年10月7日

大语言模型之十四-PEFT的LoRA

在《大语言模型之七- Llama-2单GPU微调SFT》和《大语言模型之十三 LLama2中文推理》中我们都提到了LoRA&#xff08;低秩分解&#xff09;方法&#xff0c;之所以用低秩分解进行参数的优化的原因是为了减少计算资源。 我们以《大语言模型之四-LlaMA-2从模型到应用》一文中的图…

windows内核编程(2021年出版)笔记

1. Windows内部概览 1.1 进程 进程包含以下内容&#xff1a; 可执行程序&#xff0c;代码和数据私有的虚拟地址空间&#xff0c;分配内存时从这里分配主令牌&#xff0c;保存进程默认安全上下文&#xff0c;进程中的线程执行代码时会用到它私有句柄表&#xff0c;保存进程运…

QT实现tcp服务器客户端

服务器.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时&#xff0c;服务器已经成功进入监听状态…

DirectX12_Windows_GameDevelop_3:Direct3D的初始化

引言 查看龙书时发现&#xff0c;第四章介绍预备知识的代码不太利于学习。因为它不像是LearnOpenGL那样从头开始一步一步教你敲代码&#xff0c;导致你没有一种整体感。如果你把它当作某一块的代码进行学习&#xff0c;你跟着敲会发现&#xff0c;总有几个变量是没有定义的。这…

Linux系统及Docker安装RabbitMq

目录 一、linux系统安装 1、上传文件 2、在线安装依赖环境 3、安装Erlang 4、安装RabbitMQ 5、开启管理界面及配置 6、启动 7、删除mq 二、docker安装 1、上传mq.tar包或使用命令拉取镜像 2、启动并运行 3、访问mq 一、linux系统安装 1、上传文件 2、在线安装依赖环…

3. 无重复字符的最长子串(枚举+滑动窗口)

目录 一、题目 二、代码 一、题目 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 二、代码 class Solution { public:int lengthOfLongestSubstring(string s) {int _MaxLength 0;int left 0, right 0;vector<int>hash(128, 0);//ASCII…

Qt扫盲-QTreeView 理论总结

QTreeView 理论使用总结 一、概述二、快捷键绑定三、提高性能四、简单实例1. 设计与概念2. TreeItem类定义3. TreeItem类的实现4. TreeModel类定义5. TreeModel类实现6. 在模型中设置数据 一、概述 QTreeView实现了 model 中item的树形表示。这个类用于提供标准的层次列表&…

C#上位机——根据命令发送

C#上位机——根据命令发送 第一步&#xff1a;设置窗口的布局 第二步&#xff1a;设置各个属性 第三步&#xff1a;编写各个模块之间的关系

第九课 排序

文章目录 第九课 排序排序算法lc912.排序数组--中等题目描述代码展示 lc1122.数组的相对排序--简单题目描述代码展示 lc56.合并区间--中等题目描述代码展示 lc215.数组中的第k个最大元素--中等题目描述代码展示 acwing104.货仓选址--简单题目描述代码展示 lc493.翻转树--困难题…

OMV6 安装Extras 插件失败的解决方法

# Time: 2023/10/07 #Author: Xiaohong # 运行环境: OS: OMV6 # 功能: 安装Extras 插件失败的解决方法 问题描述&#xff1a;OMV6 安装插件omv-extras&#xff0c;只能按如下提示的命令行&#xff0c;但安装过程中&#xff0c;会提示raw.githubusercontent.com 无法访问插…

抖音账号矩阵系统开发源码----技术研发

一、技术自研框架开发背景&#xff1a; 抖音账号矩阵系统是一种基于数据分析和管理的全新平台&#xff0c;能够帮助用户更好地管理、扩展和营销抖音账号。 抖音账号矩阵系统开发源码 部分源码分享&#xff1a; ic function indexAction() { //面包屑 $breadc…

【QT5-程序控制电源-RS232-SCPI协议-上位机-基础样例【1】】

【QT5-程序控制电源-RS232-SCPI协议-上位机-基础样例【1】】 1、前言2、实验环境3、自我总结1、基础了解仪器控制-熟悉仪器2、连接SCPI协议3、选择控制方式-程控方式-RS2324、代码编写 4、熟悉协议-SCPI协议5、测试实验-测试指令&#xff08;1&#xff09;硬件连接&#xff08;…

再来介绍另一个binlog文件解析的第三方工具my2sql

看腻了文字就来听听视频演示吧&#xff1a;https://www.bilibili.com/video/BV1rp4y1w74B/ github项目&#xff1a;https://github.com/liuhr/my2sql gitee链接&#xff1a;https://gitee.com/mirrors/my2sql my2sql go版MySQL binlog解析工具&#xff0c;通过解析MySQL bin…

8.2 JUC - 4.Semaphore

目录 一、是什么&#xff1f;二、简单使用三、semaphore应用四、Semaphore原理 一、是什么&#xff1f; Semaphore&#xff1a;信号量&#xff0c;用来限制能同时访问共享资源的线程上限 二、简单使用 public class TestSemaphore {public static void main(String[] args) …

H桥级联型五电平三相逆变器Simulink仿真模型

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

我写过的最蠢的代码

目录 前言正文蠢代码 - 1蠢代码 - 2蠢代码 - 3提醒&#xff01; 蠢代码 - 4 总结 前言 每个人的身上都有毛毛 每个人的代码有些十分蠢&#xff0c;正巧&#xff0c;我也有&#xff01; 一看到CSDN的活动《你写过的最蠢的代码是&#xff1f;》&#xff0c;我立刻想要参加来告诉…

热迁移中VirtIO-PCI设备的配置空间处理

文章目录 问题现象定位过程日志分析源端目的端 原理分析基本原理上下文分析复现分析patch分析 总结解决方案 问题现象 集群升级虚拟化组件版本&#xff0c;升级前存量运行并挂载了virtio磁盘的虚拟机集群内热迁移到升级后的节点失败&#xff0c;QEMU报错如下&#xff1a; 202…