java反射(2)

news2025/5/9 20:22:06
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.coloradmin.cn/o/2371759.html

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

相关文章

自由学习记录(58)

Why you were able to complete the SpringBoot MyBatisPlus task smoothly: Clear logic flow: Database → Entity → Service → Controller → API → JSON response. Errors are explicit, results are verifiable — you know what’s broken and what’s fixed. Sta…

《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-《5G通信速成:MATLAB毫米波信道建模仿真指南》

《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-5G通信速成:MATLAB毫米波信道建模仿真指南 🚀📡 大家好!今天我将带大家进入5G通信的奇妙世界,我们一起探索5G通信中最激动人心的部分之一——毫米波信…

工程师 - 汽车分类

欧洲和中国按字母对汽车分类: **轴距**:简单来说,就是前轮中心点到后轮中心点之间的距离,也就是前轮轴和后轮轴之间的长度。根据轴距的大小,国际上通常把轿车分为以下几类(德国大众汽车习惯用A\B\C\D分类&a…

57.[前端开发-前端工程化]Day04-webpack插件模式-搭建本地服务器

Webpack常见的插件和模式 1 认识插件Plugin 认识Plugin 2 CleanWebpackPlugin CleanWebpackPlugin 3 HtmlWebpackPlugin HtmlWebpackPlugin 生成index.html分析 自定义HTML模板 自定义模板数据填充 4 DefinePlugin DefinePlugin的介绍 DefinePlugin的使用 5 mode模式配置…

K8S - 金丝雀发布实战 - Argo Rollouts 流量控制解析

一、金丝雀发布概述 1.1 什么是金丝雀发布? 金丝雀发布(Canary Release)是一种渐进式部署策略,通过逐步将生产流量从旧版本迁移至新版本,结合实时指标验证,在最小化风险的前提下完成版本迭代。其核心逻辑…

Qt中数据结构使用自定义类————附带详细示例

文章目录 C对数据结构使用自定义类1 QMap使用自定义类1.1 使用自定义类做key1.2 使用自定义类做value 2 QSet使用自定义类 参考 C对数据结构使用自定义类 1 QMap使用自定义类 1.1 使用自定义类做key QMap<key,value>中数据存入时会对存入key值的数据进行比较&#xff…

数据可视化与分析

数据可视化的目的是为了数据分析&#xff0c;而非仅仅是数据的图形化展示。 项目介绍 项目案例为电商双11美妆数据分析&#xff0c;分析品牌销售量、性价比等。 数据集包括更新日期、ID、title、品牌名、克数容量、价格、销售数量、评论数量、店名等信息。 1、数据初步了解…

旅游设备生产企业的痛点 质检系统在旅游设备生产企业的应用

在旅游设备制造行业&#xff0c;产品质量直接关系到用户体验与企业口碑。从景区缆车、观光车到水上娱乐设施&#xff0c;每一件设备的安全性与可靠性都需经过严苛检测。然而&#xff0c;传统质检模式常面临数据分散、流程不透明、合规风险高等痛点&#xff0c;难以满足旅游设备…

使用ESPHome烧录固件到ESP32-C3并接入HomeAssistant

文章目录 一、安装ESPHome二、配置ESP32-C3控制灯1.主配置文件esp32c3-luat.yaml2.基础通用配置base.yaml3.密码文件secret.yaml4.围栏灯four_light.yaml5.彩灯rgb_light.yaml6.左右柱灯left_right_light.yaml 三、安装固件四、HomeAssistant配置ESPHome1.直接访问2.配置ESPHom…

【漫话机器学习系列】237. TSS总平方和

深度理解 TSS&#xff08;总平方和&#xff09;&#xff1a;公式、意义与应用 在机器学习与统计建模领域&#xff0c;评价模型好坏的重要指标之一就是方差与误差分析。其中&#xff0c;TSS&#xff08;Total Sum of Squares&#xff0c;总平方和&#xff09;扮演着非常关键的角…

DeepSeek多尺度数据:无监督与原则性诊断方案全解析

DeepSeek 多尺度数据诊断方案的重要性 在当今的 IT 领域,数据如同石油,是驱动各类智能应用发展的核心资源。随着技术的飞速发展,数据的规模和复杂性呈爆炸式增长,多尺度数据处理成为了众多领域面临的关键挑战。以计算机视觉为例,在目标检测任务中,小目标可能只有几个像素…

Spring Framework 6:虚拟线程支持与性能增强

文章目录 引言一、虚拟线程支持&#xff1a;并发模型的革命二、AOT编译与原生镜像优化三、响应式编程与可观测性增强四、HTTP接口客户端与声明式HTTP五、性能比较与实际应用总结 引言 Spring Framework 6作为Spring生态系统的基础框架&#xff0c;随着Java 21的正式发布&#…

一场静悄悄的革命:AI大模型如何重构中国产业版图?

一场静悄悄的革命:AI大模型如何重构中国产业版图? 当ChatGPT在2022年掀起全球AI热潮时,很少有人意识到,这场技术变革正在中国产业界掀起更深层次的革命。在浙江宁波,一个纺织企业老板打开"产业链智能创新平台",30秒内就获得了原料采购、设备升级、海外拓客的全…

CentOS网络之network和NetworkManager深度解析

文章目录 CentOS网络之network和NetworkManager深度解析1. CentOS网络服务发展历史1.1 传统network阶段&#xff08;CentOS 5-6&#xff09;1.2 过渡期&#xff08;CentOS 7&#xff09;1.3 新时代&#xff08;CentOS 8&#xff09; 2. network和NetworkManager的核心区别3. ne…

当当狸智能天文望远镜 TW2 | 用科技触摸星辰,让探索触手可及

当科技邂逅星空&#xff0c;每个普通人都能成为宇宙的追光者 伽利略用望远镜揭开宇宙面纱的 400 年后&#xff0c;当当狸以颠覆传统的设计&#xff0c;让天文观测从专业领域走入千家万户。当当狸智能天文望远镜 TW2&#xff0c;重新定义「观星自由」—— 无需专业知识&#xff…

科学发现 | 源于生活的启示与突破计划的创新

注&#xff1a;本文为“科学发现”相关文章合辑。 略作重排&#xff0c;未全整理。 哪些重大科学发现&#xff0c;来自生活的启示 ︱ 科学史 2020/10/29 导读 好奇心是最好的向导和老师。 撰文 | 陈敬全&#xff08;东华大学人文学院教授&#xff09; 英国进化论者赫胥黎…

【ArcGIS微课1000例】0145:如何按照自定义形状裁剪数据框?

文章目录 一、添加数据二、绘制形状三、裁剪格网和经纬网一、添加数据 打开软件,添加配套实验数据包中0145.rar中的影像数据,如下图所示: 二、绘制形状 1. 在数据视图中,使用绘图 工具条上的新建圆工具 可创建一个椭圆,使其包含要在该数据框中显示的数据范围。 修改椭圆…

网络安全防火墙技术有哪些?网络防火墙的主要作用

网络安全防火墙技术有哪些?网络防火墙的主要作用 网络安全防火墙技术是保护网络免受未经授权访问和攻击的关键工具。以下是常见的防火墙技术及其主要作用&#xff1a; 一、网络安全防火墙技术分类 包过滤防火墙&#xff08;Packet Filtering Firewall&#xff09; 原理&#x…

数据集-目标检测系列- 印度人脸 检测数据集 indian face >> DataBall

数据集-目标检测系列- 印度人脸 检测数据集 indian face >> DataBall DataBall 助力快速掌握数据集的信息和使用方式。 贵在坚持&#xff01; * 相关项目 1&#xff09;数据集可视化项目&#xff1a;gitcode: https://gitcode.com/DataBall/DataBall-detections-100s…

Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

版本: 原因 在 Dart Sass 3.0.0 中, @import 规则将被弃用,推荐使用 @use 和 @forward 规则来替代。 1.@use替代@import @use 规则允许你引入其他 Sass 文件中的变量、混合器和函数,并且可以避免命名冲突。 示例: style.scss @use variables;body {color: variables.$pr…