0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在Java中定義常量?jī)煞N常見策略

汽車玩家 ? 來源:黑馬程序員 ? 作者:黑馬程序員 ? 2020-05-05 20:49 ? 次閱讀

關(guān)于Java中常量的話題似乎有很多困惑。有些人使用整數(shù)或字符串來定義常量,而另一些人則使用枚舉。

我還遇到了在它們自己的接口中定義的常量——在接口中,使用常量的類必須實(shí)現(xiàn)接口。這種策略通常被稱為接口常量設(shè)計(jì)模式。

在本文中,我們將了解在Java中存儲(chǔ)常量的兩種最常見的策略:整數(shù)和枚舉。

首先也是最重要的,當(dāng)你決定使用常量時(shí),你應(yīng)該非常確定常量不會(huì)隨著時(shí)間而改變,這樣你就可以避免重新編譯。

在這篇文章中,我們將使用一個(gè)非常常見的常量候選——工作日!

假設(shè)我們有一個(gè)表示在線商店中訂單的類,我們希望在其中跟蹤訂單發(fā)生在一周中的哪一天。

看起來是這樣的:

在Java中定義常量?jī)煞N常見策略

請(qǐng)注意,該類暫時(shí)不會(huì)編譯-[數(shù)據(jù)類型]只是我們將使用的常量類型的占位符。

用整數(shù)定義常數(shù)

在Java中,定義常量最常用的方法之一是通過整數(shù),其中整數(shù)變量是靜態(tài)的。

在Java中定義常量?jī)煞N常見策略

定義整數(shù)常量時(shí)要問的第一個(gè)問題是將它們放置在何處。我們是否將它們直接放在班級(jí)中?還是給他們上課?

由于days非常通用,而且不一定只連接到Order類型的對(duì)象,因此我們將在它們自己的類WeekDay中定義它們。

在Java中定義常量?jī)煞N常見策略

你可能注意到了私有構(gòu)造函數(shù)——這是為了避免客戶端實(shí)例化類。該類只保存靜態(tài)變量,這些變量沒有綁定到對(duì)象,因此不需要實(shí)例化該類。

現(xiàn)在,每當(dāng)我們需要為訂單設(shè)定一個(gè)特定的日期時(shí),我們都會(huì)這樣做:

在Java中定義常量?jī)煞N常見策略

當(dāng)我們想檢查訂單是否發(fā)生在星期五時(shí),我們可以簡(jiǎn)單地調(diào)用write

到目前為止,還不錯(cuò)。這個(gè)設(shè)計(jì)肯定不會(huì)有什么問題吧?

假設(shè)你一年后會(huì)回到這個(gè)代碼,你必須檢查下訂單是否在周一發(fā)生。

在這種情況下,可以嘗試以下方法:

在那一刻,完全忘記了WeekDay類,這段代碼非常有意義。星期一是一周的第一天,所以工作日應(yīng)該是1,對(duì)吧?

但不是,因?yàn)殪o態(tài)in t變量Monday在我們的WeekDay類中定義為0!

這是一個(gè)很好的例子,說明了為什么應(yīng)該考慮避免使用整數(shù)常量。它們?nèi)菀壮鲥e(cuò)和混淆,并且很難調(diào)試。

用枚舉定義常量

在Java中定義常量的另一種方法是使用枚舉。

當(dāng)使用枚舉時(shí),常量類將如下所示:

在Java中定義常量?jī)煞N常見策略

注意,沒有私有構(gòu)造函數(shù)-不需要程序員(你!)強(qiáng)制該類是不可實(shí)例化的,因?yàn)槊杜e在默認(rèn)情況下是不可實(shí)例化的!

將工作日設(shè)置為順序的語法與整型常量的語法完全相同:

我們?nèi)绾卧谛瞧谖逄幚碛唵我矝]有什么不同:

關(guān)鍵的區(qū)別在于,這是在Order類中設(shè)置和比較weekday變量值的唯一方法。

order.setWeekDay(1);和if(order.getWeekDay()==1)都會(huì)使編譯器拋出一個(gè)錯(cuò)誤,因?yàn)樵噲D使用integerDay類型的變量,而它們應(yīng)該是WeekDay類型。

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

對(duì)于枚舉,這不再是一個(gè)問題。如果嘗試使用整數(shù)而不是工作日枚舉的成員,編譯器只會(huì)拋出一個(gè)錯(cuò)誤,告訴您需要使用工作日枚舉。

換言之,唯一能檢查訂單是否在星期五發(fā)生的是:

就如上面這樣,再清楚不過了。

不再被迫記住constants類,如果有任何客戶機(jī)要使用您的代碼,他們不必懷疑Monday實(shí)際上是由0還是1表示的。

我希望這個(gè)例子向您展示了為什么在定義常量時(shí)應(yīng)該考慮在整數(shù)上使用枚舉。

枚舉將使你的代碼不易出錯(cuò)、更易于閱讀和維護(hù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8257

    瀏覽量

    149950
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104096
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    wdm設(shè)備的兩種傳輸方式

    系統(tǒng),有多種傳輸方式,其中最常見兩種是密集波分復(fù)用(DWDM)和粗波分復(fù)用(CWDM)。 1. 密集波分復(fù)用(DWDM) 1.1 DWDM技術(shù)原理 密集波分復(fù)用(Dense Wavelength Division Multi
    的頭像 發(fā)表于 07-18 09:45 ?209次閱讀

    PCBA加工中常見兩種焊接方式詳解

    一站式PCBA智造廠家今天為大家講講PCBA加工手工焊接有哪幾種方式?PCBA加工過程中常用焊接方式。PCBA(印刷電路板組裝)加工過程,焊接是一個(gè)關(guān)鍵的步驟。而手工焊接作為一常見
    的頭像 發(fā)表于 06-14 09:18 ?345次閱讀

    異或門兩種常見的實(shí)現(xiàn)方式

    兩種實(shí)現(xiàn)方式都能夠?qū)崿F(xiàn)異或門的功能,具體的選擇取決于設(shè)計(jì)需求和邏輯門的可用性。實(shí)際構(gòu)建異或門時(shí),可以使用離散電子元件(如晶體管、二極管等)或整合電路芯片(如 TTL、CMOS 等)來實(shí)現(xiàn)。
    的頭像 發(fā)表于 02-04 17:30 ?8860次閱讀
    異或門<b class='flag-5'>兩種</b><b class='flag-5'>常見</b>的實(shí)現(xiàn)方式

    配置KubernetesPod使用代理的兩種常見方式

    的需要。本文將介紹配置KubernetesPod使用代理的兩種常見方式:通過ConfigMap和直接在應(yīng)用程序環(huán)境變量設(shè)置。
    的頭像 發(fā)表于 01-05 11:22 ?897次閱讀
    配置Kubernetes<b class='flag-5'>中</b>Pod使用代理的<b class='flag-5'>兩種</b><b class='flag-5'>常見</b>方式

    半波整流器和橋式整流器兩種常見電路的主要區(qū)別

    半波整流器和橋式整流器兩種常見電路的主要區(qū)別? 半波整流器和橋式整流器是兩種常見的電路,主要用于將交流電轉(zhuǎn)換為直流電。它們電路結(jié)構(gòu)和工作原
    的頭像 發(fā)表于 01-04 16:01 ?797次閱讀

    怎么區(qū)分PNP和NPN?一個(gè)PLC如何連接兩種傳感器呢?

    PNP傳感器和NPN傳感器是兩種常見的電子元件,它們電路起著重要的作用。
    的頭像 發(fā)表于 12-31 17:32 ?5322次閱讀
    怎么區(qū)分PNP和NPN?一個(gè)PLC如何連接<b class='flag-5'>兩種</b>傳感器呢?

    Maxwell兩種用戶自定義材料庫的實(shí)現(xiàn)方法

    Maxwell支持兩種用戶自定義材料庫。一是User Library(UserLib),另一是Personal Library(PersonalLib)。UserLib通常是一個(gè)網(wǎng)
    的頭像 發(fā)表于 12-14 17:33 ?4326次閱讀
    Maxwell<b class='flag-5'>中</b><b class='flag-5'>兩種</b>用戶自<b class='flag-5'>定義</b>材料庫的實(shí)現(xiàn)方法

    java中長(zhǎng)整型怎么定義

    Java,長(zhǎng)整型是一數(shù)據(jù)類型,用于存儲(chǔ)整數(shù)值。它的取值范圍比整型要大,可以存儲(chǔ)更大的整數(shù)值。長(zhǎng)整型的大小為8字節(jié),即64位。
    的頭像 發(fā)表于 11-30 11:29 ?2743次閱讀

    java源程序是由類定義組成的嗎

    Java源程序是由類定義組成的。Java,類是用來定義對(duì)象的一
    的頭像 發(fā)表于 11-28 16:36 ?530次閱讀

    兩種常見EMC整改流程!

    兩種常見EMC整改流程!|深圳比創(chuàng)達(dá)電子EMC
    的頭像 發(fā)表于 11-23 10:10 ?836次閱讀

    三角形繞組的兩種連線方式介紹

    在三角形繞組,有兩種常見的連線方式,分別是星型連接和三角形連接。
    的頭像 發(fā)表于 11-21 16:59 ?1399次閱讀
    三角形繞組的<b class='flag-5'>兩種</b>連線方式介紹

    三相交流負(fù)載常見兩種連接方式

    。下面將詳細(xì)介紹這兩種連接方式的特點(diǎn)和應(yīng)用。 1. 星型連接 星型連接也被稱為Y型連接,它是三相交流負(fù)載中最常見的一連接方式。星型連接
    的頭像 發(fā)表于 11-13 16:09 ?2099次閱讀

    常見的ARM架構(gòu)分為兩種是M系列另外一是A系列,這兩種有什么區(qū)別?。?/a>

    現(xiàn)在市面上常見的ARM架構(gòu)分為兩種是M系列另外一是A系列,這兩種有什么區(qū)別啊,用的時(shí)候他們一般分別用在什么地方啊。
    發(fā)表于 10-26 07:00

    如何用Java播放聲音

    聲音API播放一個(gè)音頻文件。 播放聲音的Java APIs 一般來說, javax.sound 包Java Sound APIs提供了兩種播放音頻的方法。在這
    的頭像 發(fā)表于 10-09 10:56 ?2874次閱讀

    Java枚舉的特點(diǎn)及用法

    什么是枚舉 Java 枚舉(Enum)是一特殊的數(shù)據(jù)類型,它是一組預(yù)定義常量,每個(gè)常量都有一個(gè)名稱和一個(gè)值。 枚舉類型
    的頭像 發(fā)表于 09-30 10:02 ?1145次閱讀