0086 Java核心技术卷I Chapter05

news2025/2/24 20:50:19

目录

5.6枚举类

5.7 反射 

5.7.1 Class类

4.7.2 声明异常入门 

5.7.3 资源 

5.7.4 利用反射分析类的能力 

5.7.5  使用反射在运行时分析对象 

5.7.6 使用反射编写泛型数组代码 

5.7.7 调用任意方法和构造器 

5.8 继承的设计技巧 


5.6枚举类

public enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};

这个声明定义的类型是一个类,刚好有四个实例,不能构造新的对象,因此在比较两个枚举类型的值时,并不需要调用equals,直接使用“==”就可以了

如果需要的话,可以为枚举类型增加构造器、方法和字段:

枚举的构造器总是私有的,可以省略private修饰符。如果声明一个enume构造器为public或protected,会出现语法错误。

所有的枚举类型都是Enum类的子类。它们继承了这个类的许多方法,其中最有用的是toString,这个方法会返回枚举常量名。如:Size.SMALL.toString(),将返回字符串“SMALL”

toString的逆方法是静态方法valueOf,如:

Size s = Enum.valueOf(Size.class,"SMALL");//将s设置成Size.SMALL

每个枚举类型都有一个静态的values方法,它将返回一个包含全部枚举值的数组,如:

Size[] values = Size.values();//返回包含元素Size.SMALL,Size.MEDIUM......的数组

ordinal方法返回enum声明中枚举常量的位置,从0开始计数。如:

Size.MEDIUM.ordinal();返回1


5.7 反射 

反射库(reflection library)提供了一个丰富且精巧的工具集,可以用来编写能够动态操作Java代码的程序。使用反射,Java可以支持用户界面生成器、对象关系映射器以及很多其他需要动态查询类能力的开发工具。

能够分析类能力的程序称为反射(reflective)。反射机制可以用来:

1.在运行时分析类的能力

2.在运行时检查对象,如编写一个适用于所有类的toString方法

3.实现泛型数组操作代码

4.利用Method对象,这个对象很像C++中的函数指针


5.7.1 Class类

 


4.7.2 声明异常入门 

 


5.7.3 资源 

类通常有一些关联的数据文件,如图像和声音文件,包含消息字符串和按钮标签的文本文件

在Java中,这些关联的文件被称为资源(resource)

 


5.7.4 利用反射分析类的能力 

检查类的结构是反射机制最重要的内容。

在java.lang.reflect包中有三个类Field,Method和Constructor分别用于描述类的字段、方法和构造器。这三个类都有一个getName的方法,用来返回字段、方法或构造器的名称。

Filed类有一个getType方法,用来返回描述字段类型的一个对象,这个对象的类型同样是Class。

Method和Constructor类有报告参数的方法,Method类还有一个报告返回类型的方法。这三个类都有一个名为getModifiers的方法,它将返回一个整数,用不同的0/1位描述所使用的修饰符,如public和static。可以利用java.lang.reflect包中的Modifier类的静态方法分析getModifiers返回的这个整数。如使用isPublic,isPrivate或isFinal判断方法或构造器是哪种修饰符。在getModifiers返回的整数上调用Modifier类中的适当方法,也可以利用Modifier.toString方法将修饰符打印出来。

Class类中的getFields,getMethods和getConstructors方法将分别返回这个类支持的公共字段、方法和构造器的数组,其中包括超类的公共成员。Class类的getDeclareFields,getDeclareMethods和getDeclareConstructors将分别返回类中声明的全部字段、方法和构造器的数组,其中包括私有成员、包成员和受保护成员,但不包括超类成员。

 

 

 

 


5.7.5  使用反射在运行时分析对象 

 

 

 

 

 


5.7.6 使用反射编写泛型数组代码 

 

 

 


5.7.7 调用任意方法和构造器 

 

 

 


5.8 继承的设计技巧 

1.将公共操作和字段放在超类中。

2.不要使用受保护的字段。

3.使用继承实现“is-a”关系。

4.除非所有继承的方法都有意义,否则不要使用继承。

5.在覆盖方法时,不要改变任何预期的行为。

6.使用多态,而不要使用类型信息。

7.不要滥用反射。

 

 

 

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

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

相关文章

Android聚合SDK母包反编译出包教程

文章目录【前言】一、SDK预处理1、SDK资源合并1.1、合并res目录下的资源1.2、合并libs目录1.3、合并assets目录1.4、合并AndroidManifest.xml1.5、合并jar2、jar转smali2.1、jar 混淆合并2.2、jar转dex2.3、dex转smali二、母包apk反编译1、删除母包模板代码1.1、删掉母包SDK相关…

初识C++ (五)

作者:小萌新 专栏:初阶C 作者简介:大二学生 希望能和大家一起进步 内容简介:本文会简单的介绍auto关键字 还有nullptr关键字 加油! 初识Cauto关键字c语言之前的用法C中的新用法auto使用细则auto不能使用的场景1. 未初…

直击固定资产管理痛点,让企业轻松管理海量固定资产

随着固定资产数量和种类、人员、分支机构越来越多,固定资产管理难度加大。传统人工表格管理固定资产的方式在具体实施过程中,会有种种痛点。 1)资产种类繁多,存放地分散且人员变更频繁,管理难度大。 2)盘点费时费力,手…

云原生Kubernetes 基本概念和术语

一、概述 Kubernetes 中的大部分概念如 Node 、 Pod 、 Replication Controller 、 Service 等都可以看作一 种“资源对象”,几乎所有的资源对象都可以通过 Kubernetes 提供的 kubectl 工具(或者 API 编程调用)执行增、删、改、查等操作并将…

工作中何如来合理分配核心线程数?

文章目录一 回顾1.1 使用线程池的优点1.2 任务类型1.3 IO密集型任务确定线程数1.4 CPU密集型任务确定线程数1.5 混合型任务确定线程数一 回顾 1.1 使用线程池的优点 降低资源消耗:线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源&…

学习笔记-Windows 安全

Windows 安全 注 : 笔记中拓扑图 drawio 源文件在其图片目录下 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. 大纲 漏洞利用 LOL RDP 命令行开启RDP多开连接记录凭据窃取绕过组策略限制绕过本地安全策略限制…

手机浏览器怎么下载视频,第三方手机浏览器下载视频的方法

在我们的手机中,总少不了一款手机浏览器。很多人经常使用手机浏览器看视频,那么如何在网页中将喜欢的视频下载下载下来呢?下面给大家讲解UC浏览器、多御安全浏览器、QQ浏览器下载视频的方法,有需要的朋友可以继续往下看。 UC浏览器…

如何写成高性能的代码(三):巧用稀疏矩阵节省内存占用

稀疏矩阵的概念 一个mn的矩阵是一个由m行n列元素排列成的矩形阵列。矩阵里的元素可以是数字、符号及其他的类型的元素。 一般来说,在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀…

【数据结构】详解顺序表(图解)

目录一、顺序表的概念1.1、静态顺序表1.2、动态顺序表二、接口实现2.1、开辟一个动态顺序表及初始化2.2、顺序表的增容2.3、顺序表的尾插及尾删2.4、顺序表的头插及头删2.5、顺序表在pos处插入及删除数据2.6、顺序表的销毁及打印2.7、顺序表的查找及修改一、顺序表的概念 顺序表…

【linux/docker】解决ORA-28000: the account is locked

项目场景: oracle11g客户端连接失败 问题描述 java.sql.SQLException: ORA-28000: the account is locked 原因分析: 由于oracle 11g 在默认在default概要文件中设置了密码最大错误次数为10,“FAILED_LOGIN_ATTEMPTS10”,密码错误…

单商户商城系统功能拆解25—营销中心—优惠券

单商户商城系统,也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法,例如拼团,秒杀,砍价,包邮…

NumPy数组基础

一、NumPy数组属性 首先我们先了解一下NumPy 数组属性。NumPy 的数组中比较重要 ndarray 对象属性有: 属性说明ndarray.ndim秩,即轴的数量或维度的数量ndarray.shape数组的维度,对于矩阵,n 行 m 列ndarray.size数组元素的总个数…

Python应用开发——串口通信

Python应用开发——串口通信 目录Python应用开发——串口通信前言1 环境搭建2 硬件准备3 代码编写与测试3.1 简单测一下串口收发3.2 补充细节3.3 完善整个收发流程结束语前言 在嵌入式开发中我们经常会用到串口,串口通信简单,使用起来方便,且…

20:访问者模式

1:定义 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 2:结构 访问者模式包含以下主要角色: 抽象访问者(Visitor)角色:定义了对每一个元…

Matlab 高光谱遥感数据处理与混合像元分解

教程从基础、方法、实践三方面对高光谱遥感进行讲解。基础篇,站在学员的角度去理解“高光谱”,用大家能听的懂的语言去讲述高光谱的基本概念和理论,帮助学员深入理解这项技术的底层科学机理。方法篇,将高光谱技术与MATLAB工具结合…

Yolov5:强大到你难以想象──新冠疫情下的口罩检测

初识Yolov5是看到一个视频可以检测街道上所有的行人,并实时框选出来。之后学习了CNN卷积神经网络,在完成一个项目需求时,发现卷积神经网络在切割图像方面仍然不太好用。于是我想到了之前看到的Yolov5,实战后不禁感慨一句&#xff…

50天50个前端小项目(纯html+css+js)第十八天(背景轮播图)

今天要做的是一个轮播图&#xff0c;不过是属于全屏类型的轮播图&#xff0c;先来看看效果&#xff1a; 点击左右按钮能切换背景&#xff0c;达到轮播图效果 来看代码实现部分&#xff0c;首先是html: <!DOCTYPE html> <html lang"en"><head>&…

四大含金量高的算法证书考试

证书考试推荐一、PAT 计算机程序设计能力测试二、CCF CSP认证三、团体程序设计天梯赛四、蓝桥杯大赛一、PAT 计算机程序设计能力测试 官网&#xff1a;PAT 计算机程序设计能力测试 PAT为浙江大学出的一款程序设计的测试网站&#xff0c;分为乙级、甲级、顶级三种&#xff0c;…

【MySQL 第十二天 事务的介绍|InnoDB使用事务】

【MySQL 第十二天 事务的介绍|InnoDB使用事务】【1】mysql事物的介绍【2】mysql事务处理的方法【3】mysql是u用InnoDB使用事务生命不息&#xff0c;学习不止 【1】mysql事物的介绍 atomicity 原子性&#xff1a;所有事情是统一的整体&#xff0c;必须一起执行&#xff0c;或者都…

2022 需求工程综合论述题【太原理工大学】

需求工程考题的最后一个模块 —— 综合论述题&#xff0c;只出一道题&#xff0c;30分&#xff0c;马上要考试了&#xff0c;临时抱佛脚其实还是非常管用的 hhh&#xff0c;简答、选择、填空及材料分析题前面博客已更&#xff0c;重点把下面这两个题看明白&#xff0c;仅供参考…