Java反射类、构造方法、类变量、类方法

被反射的Student类

package reflect;public class Student {public String name;private String age;public int num;public Student(){}public Student(String age) {this.age = age;}private Student(String name, String age){this.age = age;this.name = name;}public String getName() {return name;}public String getAge() {return age;}public void setName(String name) {this.name = name;}public void setAge(String age) {this.age = age;}
}

反射获取Class的三种方式

  • Class.forName()
  • 类名.class
  • 类对象.getClass()

代码

        //1Class aClass = Class.forName("reflect.Student");//2Class bClass = Student.class;//3Student student = new Student();Class cClass = student.getClass();

运行如下
在这里插入图片描述

反射获取构造方法

获取所有
  • getConstructors() 只能获取public类型构造方法
  • getDeclaredConstructors() 获取所有声明的构造方法

代码

        //获取反射类StudentClass aClass = Class.forName("reflect.Student");//getConstructors()Constructor[] constructor = aClass.getConstructors();for(Constructor con : constructor){System.out.println(con);}System.out.println();//getDeclaredConstructors()Constructor[] constructor2 = aClass.getDeclaredConstructors();for(Constructor con : constructor2){System.out.println(con);}}

运行如下
在这里插入图片描述

获取单个

declared差异和上面一样,至于获取哪个构造方法,由方法传入的参数类型决定

  • getConstructor()
  • getDeclaredConstructor()

代码

        //获取反射类StudentClass aClass = Class.forName("reflect.Student");/*public Student(){}public Student(String age) {this.age = age;}private Student(String name, String age){this.age = age;this.name = name;}*/Constructor constructor1 = aClass.getDeclaredConstructor();Constructor constructor2 = aClass.getDeclaredConstructor(String.class);Constructor constructor3 = aClass.getDeclaredConstructor(String.class,String.class);System.out.println(constructor1);System.out.println(constructor2);System.out.println(constructor3);

运行如下
在这里插入图片描述

反射获取成员变量

其实和上面获取构造方法一样,只不过变成了field

获取所有
  • getFields()
  • getDeclaredFields()

代码

package reflect;import java.lang.reflect.Field;public class Main {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {//获取反射类StudentClass aClass = Class.forName("reflect.Student");Field[] fields = aClass.getFields();for(Field field : fields){System.out.println(field);}System.out.println();Field[] fields2 = aClass.getDeclaredFields();for(Field field : fields2){System.out.println(field);}}}

运行如下
在这里插入图片描述

获取单个
  • getField()
  • getDeclaredField()

括号中传入String类型的变量名

代码

package reflect;import java.lang.reflect.Field;public class Main {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {//获取反射类StudentClass aClass = Class.forName("reflect.Student");Field field = aClass.getField("name");System.out.println(field);Field field2 = aClass.getDeclaredField("age");System.out.println(field2);}}

运行如下
在这里插入图片描述

获取成员方法

当然是和前面基本一样了,不多解释了

获取所有
  • getMethods()
  • getDeclaredMethods()

代码

package reflect;import java.lang.reflect.Field;
import java.lang.reflect.Method;public class Main {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {//获取反射类StudentClass aClass = Class.forName("reflect.Student");Method[] methods = aClass.getMethods();for(Method method: methods){System.out.println(method);}System.out.println();Method[] methods2 = aClass.getDeclaredMethods();for(Method method: methods2){System.out.println(method);}}}

运行如下
在这里插入图片描述

仔细观察,你会发现如果不加declare的方法,会连带父类的一些方法一起打印,这一点需要注意一下

最后是获取单个方法

反射方法最大的问题是什么?重载
怎么办呢,那就在反射前不仅声明要获取的方法名,同时也声明参数类型
比如String,就写String.class;int就写int

  • getMethod()
  • getDeclaredMethod()

代码

package reflect;import java.lang.reflect.Field;
import java.lang.reflect.Method;public class Main {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {//获取反射类StudentClass aClass = Class.forName("reflect.Student");Method method = aClass.getMethod("setName", String.class);System.out.println(method);Method method2 = aClass.getDeclaredMethod("getName");System.out.println(method2);}}

运行如下
在这里插入图片描述

最后,记得要抛出异常奥,要不然拒绝服务就来了

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

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

相关文章

解析Python的Lambda函数:【理解】与【运用】

目录 引言理解Lambda函数定义语法Lambda函数的特点 Lambda函数使用场景举例小结结束语 引言 在Python编程语言中,Lambda函数是一种特殊的函数形式,它以【简洁】、【快速】和【轻量级】而闻名。Lambda函数在需要短小函数的地方非常有用,比如在…

代码随想录——数组 刷题记录

二分查找 704.二分查找 注意while循环条件low<high修改完low和high值之后别忘记修改mid 35.搜索插入位置 注意插入为最大最小的判断 34.在排序数组中查找元素的第一个和最后一个位置 二分查找到target之后往左右分别查找边界 69.x的平方根 mid*mid过大需要long强制类…

如何解决Windows 11黑屏的问题,让电脑“重见光明”

本页介绍了经过测试并证明有效的常见Windows 11黑屏故障的所有修复程序。 本页上的提示和解决方案适用于所有Windows 11设备,从台式电脑和笔记本电脑到微软的Surface二合一设备。 是什么导致Windows 11黑屏死机 在使用Windows 11时,显示器或屏幕明显关闭,通常被称为Window…

「Verilog学习笔记」单端口RAM

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule RAM_1port(input clk,input rst,input enb,input [6:0]addr,input [3:0]w_data,output wire [3:0]r_data ); //*************code***********//re…

21. 常用shell之 chmod - 更改文件权限 的用法和衍生用法

chmod 是一个在 Unix 和类 Unix 系统&#xff08;如 Linux 和 macOS&#xff09;中用于更改文件或目录权限的命令。理解 chmod 的基本用法和衍生用法对于管理系统文件和保护数据安全非常重要。 基本用法 在 Unix 和类 Unix 系统中&#xff0c;文件和目录的访问权限被分为三类…

英语六级翻译

1. 青海是中国西北部的一个省份,平均海拔 3000 以上,大部分地区为高山和高原。青海省得名全国最大的咸水湖青海湖。青海湖被誉为“中国最美的湖泊”,是最受欢迎的旅游景点之一,也是摄影师和艺术家的天堂。 青海山川壮丽,地大物博。石油和天然气储量丰富,省内许多城市的…

【ArcGIS Pro微课1000例】0052:基于SQL Server创建企业级地理数据库案例

文章目录 环境搭建创建企业级数据库连接企业级数据库环境搭建 ArcGIS:ArcGIS Pro 3.0.1Server.ecp:版本为10.7SQL Server:版本为SQL Server Developer 2019创建企业级数据库 企业级地理数据库的创建需要通过工具箱来实现。工具位于:数据管理工具→地理数据库管理→创建企业…

亚马逊云科技AI应用 SageMaker 新突破,机器学习优势显著

&#xff08;声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区、知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道&#xff09; Amazon SageMaker是一种机器学习服务&#xff0c;帮助开发人员快速…

FFmpeg 安装配置

FFmpeg 安装配置 依赖包 sudo apt-get install -y autoconf automake bzip2 cmake freetype-devel gcc gcc-c git libtool make mercurial pkgconfig zlib-devel x264-develsudo apt-get install yasm -y安装 wget https://ffmpeg.org/releases/ffmpeg-4.2.3.tar.bz2tar -…

VS2022 将项目打包,导出为exe运行

我有一个在 VS2022 上开发的程序&#xff0c;基于.net 6框架, 想打包成 .exe程序&#xff0c;以在另一个没有安装VS的机器上运行&#xff0c;另一个机器是Win7系统&#xff0c;上面安装了.net 6框架。 虽然网上很多教程&#xff0c;需要安装Project Installer&#xff0c;配置A…

weston 1: 编译与运行傻瓜教程(补充)

系统kubuntu23.10 git clone https://gitlab.freedesktop.org/wayland/wayland.git 86588fbdebe7f6ac9363d98f524e4ae14bd4b019 meson build/ --prefix$WLD ninja -C build/ install git clone https://gitlab.freedesktop.org/wayland/wayland-protocols.git c4f559866f13…

FL Studio21.0.3.3517官方完整版下载步骤教程

FL Studio 21.0.3.3517 Producer Edition 全称Fruity Loops Studio 21 Producer Edition &#xff0c;就是大家熟悉的水果编曲软件&#xff0c;一个全能的音乐制作软件&#xff0c;包括编曲、录音、剪辑和混音等诸多功能&#xff0c;让你的电脑编程一个全能的录音室。FL Studio…

如何处理好面试中的“压力测试”?

作为一名求职者&#xff0c;在面试时有时遇到的是压力测试&#xff0c;有时则遇到的是一些无良企业单位&#xff0c;究竟如何把握忍耐的限度&#xff0c;才合格当一个能经受压力的员工&#xff0c;才能避免对无良单位的一味隐忍! 压力面试是指有意制造紧张&#xff0c;以了解求…

BERT、GPT学习问题个人记录

目录 1. 为什么过去几年大家都在做BERT, 做GPT的人少。 2. 但最近做GPT的多了以及为什么GPT架构的scaling&#xff08;扩展性&#xff09;比BERT好。 3.BERT是否可以用来做生成&#xff0c;如果可以的话为什么大家都用GPT不用BERT. 4. BERT里的NSP后面被认为是没用的&#x…

Leetcode—380.O(1) 时间插入、删除和获取随机元素【中等】

2023每日刷题&#xff08;五十七&#xff09; Leetcode—380.O(1) 时间插入、删除和获取随机元素 算法思想 实现代码 class RandomizedSet { public:vector<int> nums;unordered_map<int, int> dict;RandomizedSet() {srand((unsigned)time(NULL));}bool insert(…

【STM32】USART串口协议

1 通信接口 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发 USRT&#xff1a;TX是数据发送引脚&#xff0c;RX是数据接受引脚&#xff1b; I2C&#xf…

什么是收单外包服务机构

收单外包服务机构是指那些专门为银行或者支付服务提供商&#xff08;如信用卡公司&#xff09;提供收单相关服务的第三方公司&#xff0c;但不直接参与资金的清算和结算过程。这些机构通常负责与商户的日常交互&#xff0c;包括商户的签约、终端的安装和维护、交易数据的处理、…

信号类型, wire/reg--FPGA入门2

1. 信号类型和功能描述 https://blog.csdn.net/m0_59161987/article/details/129723048?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170260773016800192251853%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id1702607730168001…

module ‘tensorflow‘ has no attribute XXX 报错解决

问题描述&#xff1a; 粘了别人的tensorflow项目&#xff0c;运行总是报错module ‘tensorflow’ has no attribute什么什么 问题解决&#xff1a; 导入tensorflow的代码如下 import tensorflow as tf此时&#xff0c;某个某块报错&#xff0c;比如下面这个 那么就直接把tf.…

基于python实现原神那维莱特开转脚本

相信不少原友都抽取了枫丹大C那维莱特&#xff0c;其强力的输出让不少玩家爱不释手。由于其转的越快&#xff0c;越不容易丢伤害的特点&#xff0c;很多原友在开转时容易汗流浃背&#xff0c;所以特意用python写了一个自动转圈脚本&#xff0c;当按住鼠标侧键时&#xff0c;即可…