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,一经查实,立即删除!

相关文章

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

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

「Verilog学习笔记」单端口RAM

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 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…

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

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

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

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

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

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

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

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

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

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

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…

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;即可…

【Docker】WSL 2 上的 Docker 搭建和入门

▒ 目录 ▒ &#x1f6eb; 导读开发环境 1️⃣ 安装安装Docker Desktop for Windows 2️⃣ 环境配置3️⃣ hello world第一次运行再次运行分析总结 &#x1f4d6; 参考资料 &#x1f6eb; 导读 开发环境 版本号描述文章日期2023-12-14操作系统Win11 - 22H222621.2715WSL2 C:…

【NTN 卫星通信】Starlink,卫星互联网的技术革命(一)

1. 什么是Starlink Starlink是由Elon Musk创立的私人太空探索公司SpaceX提供的卫星互联网服务。它旨在为世界上传统互联网服务速度慢或不可用的偏远地区提供价格合理的高速互联网。 为什么Starlink很重要&#xff1f;   Starlink之所以重要&#xff0c;是因为它有可能为数百万…

逆向获取某音乐软件的加密(js逆向)

本文仅用于技术交流&#xff0c;不得以危害或者是侵犯他人利益为目的使用文中介绍的代码模块&#xff0c;若有侵权请联系作者更改。 老套路&#xff0c;打开开发者工具&#xff0c;直接开始找到需要的数据位置&#xff0c;然后观察参数&#xff0c;请求头&#xff0c;cookie是…

【ET8框架入门】1.运行指南

主要学习网址 论坛地址为&#xff1a;https://et-framework.cn Git地址为&#xff1a;GitHub - egametang/ET: Unity3D Client And C# Server Framework 官方QQ群 : 474643097 多线程多进程框架设计-01预告_哔哩哔哩_bilibili 项目检出 检出项目切换到release8.0分支 Git…

零信任 SASE 办公安全解决方案:提升企业网络安全与灵活性

​零信任 SASE&#xff08;Secure Access Service Edge&#xff09;办公安全解决方案为企业带来了许多好处&#xff0c;相较于以前的解决方案有明显差异。这个方案的出现是为了应对企业面临的新的网络安全挑战和远程办公的需求。 1、统一的网络安全管理&#xff1a;SASE 将网络…

Java版商城:Spring Cloud+SpringBoot b2b2c实现多商家入驻、直播带货及免 费小程序商城搭建

1. 涉及平台 平台管理、商家端&#xff08;pc端、手机端&#xff09;、买家平台&#xff08;h5/公众号、小程序、app端&#xff08;ios/android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 spring cloud、spring boot、mybatis、redis 3. 前端框架…

Unity:Camera讲解之ClearFlags

Clear Flags四个选项讲解: 前三个都是常用的&#xff0c;第四个基本不会用。 skybox(天空盒&#xff09;&#xff1a; 主要是一种用于渲染游戏场景中天空的技术。它是一个包含6个纹理图片的立方体贴图&#xff0c;分别代表了从不同角度观察天空时所看到的前、后、上、下、左…

DevEco Studio 项目鸿蒙(HarmonyOS)资源引用(自定统和系统)

DevEco Studio 项目鸿蒙&#xff08;HarmonyOS&#xff09;资源引用&#xff08;自定统和系统&#xff09; 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、资源访问 HarmonyOS应用资源分为两类&#xff0c;一类是应用资源&…

C# WPF上位机开发(键盘绘图控制)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在软件开发中&#xff0c;如果存在canvas图像的话&#xff0c;一般有几种控制方法。一种是鼠标控制&#xff1b;一种是键盘控制&#xff1b;还有一…