java反射(2)

package 反射;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;public class demo {public static void main(String[] args) throws Exception {// 通过类的全限定名获取对应的 Class 对象Class clazz = Class.forName("反射.Cat");// 获取类中声明的所有字段,包括私有、受保护和默认访问权限的字段Field[] fields = clazz.getDeclaredFields();// 打印所有声明的字段System.out.println(Arrays.toString(fields));// 获取名为 "age" 的声明字段Field ageFiled = clazz.getDeclaredField("age");// 打印该字段信息System.out.println(ageFiled);// 获取名为 "name" 的声明字段Field nameFiled = clazz.getDeclaredField("name");// 打印该字段信息System.out.println(nameFiled);// 获取名为 "color" 的声明字段Field colorFiled = clazz.getDeclaredField("color");// 打印该字段信息System.out.println(colorFiled);// 获取名为 "height" 的声明字段Field heightFiled = clazz.getDeclaredField("height");// 打印该字段信息System.out.println(heightFiled);// 以下代码注释掉,因为 getField 方法只能获取公共字段,而 name 和 age 是私有字段,调用会报错
//        Field[] fields1 = clazz.getFields();
//        System.out.println(Arrays.toString(fields1));
//        Field nameFiled1 = clazz.getField("name");
//        System.out.println(nameFiled1);
//        Field ageFiled1 = clazz.getField("age");
//        System.out.println(ageFiled1);// 获取类中声明的所有方法,包括私有、受保护和默认访问权限的方法Method[] methods = clazz.getDeclaredMethods();// 打印所有声明的方法System.out.println(Arrays.toString(methods));// 获取名为 "run" 且参数类型为 String 的声明方法Method runMethod1 = clazz.getDeclaredMethod("run", String.class);// 打印该方法信息System.out.println(runMethod1);// 获取名为 "run" 且参数类型为 String 的公共方法Method runMethod2 = clazz.getMethod("run", String.class);// 打印该方法信息System.out.println(runMethod2);// 获取名为 "fly" 的声明方法Method flyMethod1 = clazz.getDeclaredMethod("fly");// 打印该方法信息System.out.println(flyMethod1);// 获取类的所有公共构造函数Constructor[] constructors = clazz.getConstructors();// 打印所有公共构造函数System.out.println(Arrays.toString(constructors));// 获取类的所有声明的构造函数,包括私有、受保护和默认访问权限的构造函数Constructor[] constructors1 = clazz.getDeclaredConstructors();// 打印所有声明的构造函数System.out.println(Arrays.toString(constructors1));// 获取无参的声明构造函数Constructor constructor2 = clazz.getDeclaredConstructor();// 打印该构造函数信息System.out.println(constructor2);// 获取参数类型为 String 的声明构造函数Constructor constructor4 = clazz.getDeclaredConstructor(String.class);// 打印该构造函数信息System.out.println(constructor4);// 获取无参的公共构造函数Constructor constructor3 = clazz.getConstructor();// 打印该构造函数信息System.out.println(constructor3);// 获取类实现的所有接口Class[] classes = clazz.getInterfaces();// 打印类实现的所有接口System.out.println(Arrays.toString(classes));}
}
package 反射;
public class Cat implements A,B{private int age;private String name;protected String color;double height;public Cat(String name, String color, double height) {this.name = name;this.color = color;this.height = height;}public Cat() {}public Cat(String color) {this.color = color;}public void run(String name) {System.out.println("小猫的名字叫"+name);		}private int setAge(int age) {return age;	}void fly() {System.out.println("猫不回飞");}	
}

1. Class.forName("反射.Cat")

此方法能够依据类的全限定名获取对应的 Class 对象。Class 对象代表着 Java 中的类或者接口,借助它能够在运行时获取类的相关信息。

2. clazz.getDeclaredFields()

该方法会返回一个 Field 数组,其中包含类里声明的全部字段,涵盖私有、受保护以及默认访问权限的字段。

3. clazz.getDeclaredField("fieldName")

此方法可获取类中指定名称的声明字段,无论其访问权限怎样。

4. clazz.getFields()

这个方法返回一个 Field 数组,其中仅包含类的公共字段。

5. clazz.getField("fieldName")

该方法用于获取类中指定名称的公共字段。

6. clazz.getDeclaredMethods()

此方法会返回一个 Method 数组,其中包含类里声明的全部方法,涵盖私有、受保护以及默认访问权限的方法。

7. clazz.getDeclaredMethod("methodName", parameterTypes)

该方法可获取类中指定名称和参数类型的声明方法,无论其访问权限如何。

8. clazz.getMethod("methodName", parameterTypes)

此方法用于获取类中指定名称和参数类型的公共方法。

9. clazz.getConstructors()

这个方法返回一个 Constructor 数组,其中仅包含类的公共构造函数。

10. clazz.getDeclaredConstructors()

该方法会返回一个 Constructor 数组,其中包含类里声明的全部构造函数,涵盖私有、受保护以及默认访问权限的构造函数。

11. clazz.getDeclaredConstructor(parameterTypes)

此方法可获取类中指定参数类型的声明构造函数,无论其访问权限怎样。

12. clazz.getConstructor(parameterTypes)

该方法用于获取类中指定参数类型的公共构造函数。

13. clazz.getInterfaces()

这个方法返回一个 Class 数组,其中包含类实现的所有接口。

 

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

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

相关文章

使用 Cesium 构建 3D 地图应用的实践

CesiumJS 是一个功能强大的开源 JavaScript 库,能够帮助开发者快速构建高性能、高精度的 3D 地球和地图应用 。本文将介绍如何使用 Cesium 构建一个基本的 3D 地图应用,并加载自定义的 3D Tiles 模型。 初始化 Cesium Viewer 首先,在 Vue 的…

结合Splash与Scrapy:高效爬取动态JavaScript网站

在当今的Web开发中,JavaScript的广泛应用使得许多网站的内容无法通过传统的请求-响应模式直接获取。为了解决这个问题,Scrapy开发者经常需要集成像Splash这样的JavaScript渲染引擎。本文将详细介绍Splash JS引擎的工作原理,并探讨如何将其与S…

企业级可观测性实现:OpenObserve云原生平台的本地化部署与远程访问解析

文章目录 前言1. 安装Docker2. 创建并启动OpenObserve容器3. 本地访问测试4. 公网访问本地部署的OpenObserve4.1 内网穿透工具安装4.2 创建公网地址 5. 配置固定公网地址 前言 嘿,各位小伙伴们,今天要给大家揭秘一个在云原生领域里横扫千军的秘密法宝—…

将本地项目提交到新建的git仓库

方式一: # 登录git,新建git仓库和指定的分支,如master、dev# 下载代码,默认下载master分支 git clone http://10.*.*.67/performance_library/pfme-*.git # 切换到想要提交代码的dev分支 git checkout dev# 添加想要提交的文件 git add .#…

.NET平台用C#在PDF中创建可交互的表单域(Form Field)

在日常办公系统开发中,涉及 PDF 处理相关的开发时,生成可填写的 PDF 表单是一种常见需求,例如员工信息登记表、用户注册表、问卷调查或协议确认页等。与静态 PDF 不同,带有**表单域(Form Field)**的文档支持…

在macOS上安装windows系统

使用Boot Camp 1. 准备工作:确认Mac满足Boot Camp系统要求,准备好Windows安装光盘或ISO映像文件,以及一个至少8GB的空白USB闪存驱动器用于保存驱动程序。 2. 打开Boot Camp助理:在“应用程序”文件夹的“实用工具”中找到“Boot…

683SJBH基于J2EE的广州旅游管理系统

第1章  绪论 课题背景 自互联网internet成为一种革命性的大众媒体以来,其发展速度之快令人惊叹。而作为世界最大朝阳产业的旅游,当它与电子商务这一新兴模式相结合时,其潜藏的商业价值表露无遗。根据CNN(美国有线电视新闻网&…

前端面试每日三题 - Day 27

这是我为准备前端/全栈开发工程师面试整理的第27天每日三题练习,涵盖了: CSS选择器的优先级与权重计算机制Angular中的依赖注入(Dependency Injection)机制设计一个支持实时协作编辑(如Google Docs)的前端…

PostgreSQL数据库操作SQL

数据库操作SQL 创建 创建数据库 create database db_test;创建并指定相关参数 with owner : 所有者encoding : 编码connection limit :连接限制 create database db_test1 with owner postgresencoding utf-8connection limit 100;修改 修改数据库名称 renam…

JSP HTTP 状态码详解

JSP HTTP 状态码详解 引言 HTTP 状态码是 HTTP 协议的一部分,用于表示客户端与服务器之间请求与响应的状态。在 JavaServer Pages (JSP) 技术中,HTTP 状态码同样扮演着重要的角色。本文将详细解析 JSP 中的 HTTP 状态码,帮助开发者更好地理解和应用这些状态码。 HTTP 状态…

文件一键解密软件工具(支持pdf、word、excel、ppt、rar、zip格式文件)

一键解密解锁神器支持解密pdf、doc、docx、xls、xlsx、ppt、pptx、rar、zip格式文件,Excel表格、Word文档、PPT演示、RAR、ZIP压缩包、PDF文档一键轻松解密!简单/高效/安全。这款软件由密码帝官方提供,确保了其合法性和安全性,用户…

Banana Pi BPI-CM6 是一款八核 RISC-V 模块,兼容 Raspberry Pi CM 载板

Banana Pi BPI-CM6 是一款 SpacemIT K1 八核 RISC-V 系统级模块,遵循 Raspberry Pi CM5 的设计,并提供高达 16GB LPDDR4 RAM、高达 128GB eMMC 闪存、千兆以太网控制器和 WiFi 6 蓝牙 5.2 模块。 BPI-CM6 虽然与 Raspberry Pi CM5 基本兼容&#xff0c…

【项目篇之统一硬盘操作】仿照RabbitMQ模拟实现消息队列

统一硬盘操作 创建出实例封装交换机的操作封装队列的操作封装绑定的操作封装消息的操作总的完整代码: 我们之前已经使用了数据库去管理交换机,绑定,队列 还使用了数据文件去管理消息 此时我们就搞一个类去把上述两个部分都整合在一起&#…

快速上手SpringBoot开发指南

文章目录 1. 项目整体架构2. SpringBoot核心注解详解2.1 应用程序入口注解SpringBootApplication 2.2 控制器层注解RestControllerRequestMappingPostMappingRequestBody 2.3 服务层注解ServiceAutowired 2.4 数据访问层注解Repository 2.5 实体类注解JPA相关注解Lombok注解 3.…

Unity WebGL、js发布交互

官网参考 Unity3D开发之WebGL平台上 unity和js前端通信交互 WebFun.jslib mergeInto(LibraryManager.library, {JSLog: function (str) { var strsUTF8ToString(str); Log(str); Log(strs);}, Hello: function () {var strs"Hello, world!"; Log(strs); Log(UTF8ToS…

Spark 之 YarnCoarseGrainedExecutorBackend

YarnCoarseGrainedExecutorBackend executor ID , 在日志里也有体现。 25/05/06 12:41:58 INFO YarnCoarseGrainedExecutorBackend: Successfully registered with driver 25/05

[HOT 100] 2646. 最小化旅行的价格总和

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 2646. 最小化旅行的价格总和 - 力扣(LeetCode) 2. 题目描述 现有一棵无向、无根的树,树中有 n 个节点,按从 0 到 n - 1 编号。给你一…

分析 Docker 磁盘占用

以下是分析 Docker 磁盘占用的详细步骤和工具指南,帮助开发者快速定位和清理冗余数据: 1. 查看 Docker 磁盘使用概览 docker system df 输出说明: TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 15 …

聊一聊接口测试中的参数化测试

目录 一、核心概念 二、适用场景 三、参数化测试的核心目的 四、实现参数化测试的关键步骤 4.1 定义测试数据 4.2 使用测试框架参数化功能 4.3 执行测试与结果分析 五、最佳实践与注意事项 六、工具推荐 那参数化测试的目的是什么?应该是为了提高测试覆盖率…

Go语言——string、数组、切片以及map

一、string、数组、切片代码 package mainimport "fmt"// 定义结构体 type student struct {id intname stringage intscore float32 }func main() {// 使用var声明切片var slice1 []intslice1 append(slice1, 1)slice1 append(slice1, 2)slice1 append(sl…