0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在Java中定义常量两种常见策略

汽车玩家 来源:黑马程序员 作者:黑马程序员 2020-05-05 20:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

关于Java中常量的话题似乎有很多困惑。有些人使用整数或字符串来定义常量,而另一些人则使用枚举。

我还遇到了在它们自己的接口中定义的常量——在接口中,使用常量的类必须实现接口。这种策略通常被称为接口常量设计模式。

在本文中,我们将了解在Java中存储常量的两种最常见的策略:整数和枚举。

首先也是最重要的,当你决定使用常量时,你应该非常确定常量不会随着时间而改变,这样你就可以避免重新编译。

在这篇文章中,我们将使用一个非常常见的常量候选——工作日!

假设我们有一个表示在线商店中订单的类,我们希望在其中跟踪订单发生在一周中的哪一天。

看起来是这样的:

在Java中定义常量两种常见策略

请注意,该类暂时不会编译-[数据类型]只是我们将使用的常量类型的占位符。

用整数定义常数

在Java中,定义常量最常用的方法之一是通过整数,其中整数变量是静态的。

在Java中定义常量两种常见策略

定义整数常量时要问的第一个问题是将它们放置在何处。我们是否将它们直接放在班级中?还是给他们上课?

由于days非常通用,而且不一定只连接到Order类型的对象,因此我们将在它们自己的类WeekDay中定义它们。

在Java中定义常量两种常见策略

你可能注意到了私有构造函数——这是为了避免客户端实例化类。该类只保存静态变量,这些变量没有绑定到对象,因此不需要实例化该类。

现在,每当我们需要为订单设定一个特定的日期时,我们都会这样做:

在Java中定义常量两种常见策略

当我们想检查订单是否发生在星期五时,我们可以简单地调用write

到目前为止,还不错。这个设计肯定不会有什么问题吧?

假设你一年后会回到这个代码,你必须检查下订单是否在周一发生。

在这种情况下,可以尝试以下方法:

在那一刻,完全忘记了WeekDay类,这段代码非常有意义。星期一是一周的第一天,所以工作日应该是1,对吧?

但不是,因为静态in t变量Monday在我们的WeekDay类中定义为0!

这是一个很好的例子,说明了为什么应该考虑避免使用整数常量。它们容易出错和混淆,并且很难调试。

用枚举定义常量

在Java中定义常量的另一种方法是使用枚举。

当使用枚举时,常量类将如下所示:

在Java中定义常量两种常见策略

注意,没有私有构造函数-不需要程序员(你!)强制该类是不可实例化的,因为枚举在默认情况下是不可实例化的!

将工作日设置为顺序的语法与整型常量的语法完全相同:

我们如何在星期五处理订单也没有什么不同:

关键的区别在于,这是在Order类中设置和比较weekday变量值的唯一方法。

order.setWeekDay(1);和if(order.getWeekDay()==1)都会使编译器抛出一个错误,因为试图使用integerDay类型的变量,而它们应该是WeekDay类型。

回想一下你完全忘记了的情景。

对于枚举,这不再是一个问题。如果尝试使用整数而不是工作日枚举的成员,编译器只会抛出一个错误,告诉您需要使用工作日枚举。

换言之,唯一能检查订单是否在星期五发生的是:

就如上面这样,再清楚不过了。

不再被迫记住constants类,如果有任何客户机要使用您的代码,他们不必怀疑Monday实际上是由0还是1表示的。

我希望这个例子向您展示了为什么在定义常量时应该考虑在整数上使用枚举。

枚举将使你的代码不易出错、更易于阅读和维护。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    9446

    浏览量

    156143
  • JAVA
    +关注

    关注

    20

    文章

    2997

    浏览量

    115683
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用Firebase AI Logic生成图像模型的两种新功能

    为您的应用添加自定义图像,能够显著改善和个性化用户体验,有效提高用户参与度。本文将探讨使用 Firebase AI Logic 生成图像的两种新功能: 其一是 Imagen 专属编辑功能预览版;其二
    的头像 发表于 11-30 09:28 209次阅读

    位操作的常见错误与应对策略

    (一)误操作其他位的防范 进行位操作时,一个常见的错误就是误操作其他位,这可能导致系统出现意想不到的行为。为了避免这种错误,使用位掩码是一非常有效的方法。位掩码是一个二进制数,它的每一位对应
    发表于 11-24 07:50

    C语言的常量介绍

    程序执行过程,值不发生改变的量称为常量。 mtianyan: C语言的常量可以分为直接常量和符号
    发表于 11-24 07:12

    用PLC实现卷径计算的两种算法

    卷径计算,是动态计算如钢卷,纸卷等存料量的一方法,它是实现张力控制和自动充放料、以及甩尾控制的重要前提。卷径计算目前主流的方法有两种,一是根据机列速度(产线速度)和和被测卷的转动角速度求得;另一
    的头像 发表于 11-14 16:54 1361次阅读
    用PLC实现卷径计算的<b class='flag-5'>两种</b>算法

    两种常见的除法器工作原理

    串行结构,计算速度慢,且需要的时钟周期数不确定。 加减交替法是一不恢复余数的除法。恢复余数的除法设第i次减法计算后的余数小于0,则恢复余数法的操作是,其中Y是除数,是余数。则第i+1次的余数如下
    发表于 10-21 13:28

    两种TVS有啥不同?

    当我们查看TVS二极管的规格书,常会看到有以下两种种引脚功能标识图:对于初学者,看到感到疑惑,他们一样吗?他们有啥区别?为啥有的个尖头往外,阳极连在一起,有的个尖头往里,阴极连在一起?一连三问。EMC小哥根据自己经验略作分析
    的头像 发表于 09-15 20:27 582次阅读
    这<b class='flag-5'>两种</b>TVS有啥不同?

    两种散热路径的工艺与应用解析

    背景:两种常见的散热设计思路 大电流或高功率器件应用,散热和载流能力是PCB设计必须解决的难题。
    的头像 发表于 09-15 14:50 468次阅读

    贴片晶振两种常见封装介绍

    贴片晶体振荡器作为关键的时钟频率元件,其性能直接关系到系统运行的稳定性。今天,凯擎小妹带大家聊聊贴片晶振两种常见封装——金属面封装与陶瓷面封装。
    的头像 发表于 07-04 11:29 965次阅读
    贴片晶振<b class='flag-5'>中</b><b class='flag-5'>两种</b><b class='flag-5'>常见</b>封装介绍

    两种感应电机磁链观测器的参数敏感性研究

    模式和发电模式下对闭环电压电流模型磁链观测器和滑模磁链观测器参数敏感性进行了研究,通过仿真和实验比较了这两种观测器对定、转子电阻及励磁电感的敏感性。同时还研究了基于这两种观测器的模型参考自适应系统
    发表于 06-09 16:16

    铷原子钟与CPT原子钟:两种时间标准的区别

    物理学的世界,精密的时间测量是至关重要的。这就需要一个高度准确且稳定的时间标准,这就是原子钟。今天我们将探讨两种重要的原子钟:铷原子钟和CPT原子钟,以及它们之间的主要区别。首先,我们来了解一下
    的头像 发表于 05-22 15:49 500次阅读
    铷原子钟与CPT原子钟:<b class='flag-5'>两种</b>时间标准的区别

    电机大范围调速的综合电压调制策略

    使用DPWM策略,并提出一基于零矢量分配的过渡策略,使得两种调制方式可以平滑的过渡。这种方法使得电压波形质量,开关损耗以及电压线性范围得到优化。最后,搭建了基于Simulink的仿真
    发表于 04-01 14:51

    覆铜的两种形式是什么

    电子电路设计与制造领域,覆铜的实现形式多样,其中大面积的覆铜和网格铜是最为常见且各具特色的两种,它们不同的应用场景下发挥着关键作用。 大面积的覆铜,顾名思义,是指在印刷电路板(PC
    的头像 发表于 02-04 14:10 924次阅读

    const定义的是不是常量

    C语言是如何定义常量的?const定义的算不算是常量常见的有这么几种方式。 首先就是宏定义
    的头像 发表于 01-14 11:35 643次阅读

    基于ISOS测试标准,两种封装方式对钙钛矿太阳能电池性能影响分析

    钙钛矿太阳能电池(PSCs)极具潜力,但湿度和氧气会导致其性能快速下降,因此封装技术对提高其稳定性至关重要。文章研究了两种常见的封装策略:基于层压的玻璃-玻璃封装(COM)和基于胶水的封装(LAB
    的头像 发表于 01-03 09:03 1585次阅读
    基于ISOS测试标准,<b class='flag-5'>两种</b>封装方式对钙钛矿太阳能电池性能影响分析

    AMC1204有两种封装,SOIC-8和SOIC-16,功能一样吗?为什么要推出两种封装?

    呢?AMC1204,AMC1304这样做有什么好处吗? 2、AMC1204有两种封装,SOIC-8和SOIC-16,功能一样吗?为什么要推出两种封装?
    发表于 12-27 07:22