【Java 基礎】26 枚舉

文章目錄

    • 1. 什么是枚舉
    • 2. 定義
    • 3. 使用
      • 1)常量
      • 2)遍歷
      • 3)switch
    • 4. 屬性和方法
      • 1)屬性
      • 2)方法
    • 5. 實現原理
    • 6. 使用場景
    • 總結

1. 什么是枚舉

枚舉是列出某些有窮序列集的所有成員的程序,或者是一種特定類型對象的計數。

在 Java中,枚舉是一種特殊的數據類型,用于表示一組具名的常量。

枚舉類型可以包含零個或多個枚舉常量,每個常量都是該枚舉類型的一個實例。使用枚舉可以使代碼更加清晰、可讀,并避免使用整數或字符串常量進行硬編碼。

源碼:
在這里插入圖片描述

Enum 的定義,我們可以看到它實現了 ComparableSerializable 兩個接口,說明了枚舉類型可以使用比較器或者序列化操作。

2. 定義

枚舉類型是通過 enum 關鍵字來定義的

示例代碼:

public enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

在這個例子中,我們定義了一個名為 Day 的枚舉類型,包含了一周的所有天。每個枚舉常量都是 Day 類型的一個實例,代表一個特定的天。

3. 使用

1)常量

枚舉常量可以直接用于程序中

Day today = Day.SATURDAY;
if (today == Day.SATURDAY || today == Day.SUNDAY) {System.out.println("放假啦!!!");
} else {System.out.println("搬磚中。。。");
}

2)遍歷

通過 values() 方法獲取枚舉類型的所有常量進行遍歷

示例代碼:

public class Demo {public static void main(String[] args) {for (Day day : Day.values()) {System.out.println(day);}}
}
enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

輸出結果:

MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY

3)switch

枚舉經常與 switch 語句結合使用,使得代碼更加清晰

示例代碼:

public class Demo {public static void main(String[] args) {Day today = Day.SATURDAY;switch (today) {case MONDAY:case TUESDAY:case WEDNESDAY:case THURSDAY:case FRIDAY:System.out.println("搬磚中。。。");break;case SATURDAY:case SUNDAY:System.out.println("放假啦。。。");break;default:System.out.println("錯誤的星期");break;}}
}
enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

輸出結果:

放假啦。。。

4. 屬性和方法

1)屬性

枚舉可以包含屬性,每個枚舉常量可以擁有自己的屬性

示例代碼:

enum Day {MONDAY("Mon"),TUESDAY("Tue"),WEDNESDAY("Wed"),THURSDAY("Thu"),FRIDAY("Fri"),SATURDAY("Sat"),SUNDAY("Sun");// 自定義屬性private final String subName;Day(String subName) {this.subName = subName;}public String getSubName() {return subName;}
}

每個枚舉常量都有一個名為 subName 的屬性,代表了星期的簡寫

2)方法

枚舉可以定義方法,使得每個枚舉常量可以具有自己的行為

示例代碼:

enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;// 自定義方法public boolean isWeekend() {return this == SATURDAY || this == SUNDAY;}
}

在這個例子中,我們為枚舉定義了一個方法 isWeekend(),用于判斷當前枚舉常量是否表示周末

5. 實現原理

枚舉類型本質上是一種特殊的類

編譯器會在創建枚舉時自動添加一些特殊的方法,例如 values() 方法用于獲取所有枚舉常量

6. 使用場景

  • 用枚舉替代整數常量和字符串常量

    當程序需要一組常量時,使用枚舉可以使得代碼更加清晰和可讀,避免了硬編碼的問題

  • 使用枚舉常量的方法提高可讀性

    在定義枚舉時,考慮為每個常量添加一些相關的方法,提高代碼的可讀性和可維護性

  • 使用枚舉實現單例模式

    枚舉天生具備線程安全性和單例特性,可以作為實現單例模式的一種方式

總結

枚舉是一種強大的工具,用于表示一組具名的常量。通過枚舉,我們可以更清晰地表達代碼中的常量集合,并通過相關的屬性方法使得代碼更加可讀、可維護。使用枚舉的最佳實踐包括替代整數常量和字符串常量、為枚舉常量添加有意義的方法、以及利用枚舉實現單例模式等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207766.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207766.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207766.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows下使用CMD修改本地IP

在網絡適配器界面查看當前網線連接的哪個網口,我當前連的是 以太網 這個名字的: 在windows下使用管理員權限打開CMD命令工具,輸入如下命令(如我想本地ip改成192.168.2.4): netsh interface ip set address "以太網" st…

LeetCode Hot100 78.子集

題目: 給你一個整數數組 nums ,數組中的元素 互不相同 。返回該數組所有可能的子集(冪集)。 解集 不能 包含重復的子集。你可以按 任意順序 返回解集。 方法:靈神 選 or 不選 class Solution {private final List&…

spring 的概述和入門

? 我是南城余!阿里云開發者平臺專家博士證書獲得者! 歡迎關注我的博客!一同成長! 一名從事運維開發的worker,記錄分享學習。 專注于AI,運維開發,windows Linux 系統領域的分享! …

信號量的使用和注意事項

大家好,今天給大家介紹信號量的使用和注意事項,文章末尾附有分享大家一個資料包,差不多150多G。里面學習內容、面經、項目都比較新也比較全!可進群免費領取。 信號燈(信號量)集 POSIX 線程中的同步用的是無名信號量 進程間的同步使…

喬拓云平臺:微信小程序開發的全新視角與高效路徑

隨著微信小程序的日益普及,越來越多的人開始關注如何開發自己的小程序。對于沒有開發經驗的人來說,借助第三方平臺如喬拓云,可以輕松實現小程序的開發。本文將介紹微信小程序開發需要學習的東西,并探討如何借助喬拓云平臺進行無經…

基于深度學習的鋼鐵缺陷檢測系統(含UI界面,Python代碼,數據集、yolov8)

項目介紹 項目中所用到的算法模型和數據集等信息如下: 算法模型: ? ? yolov8 yolov8主要包含以下幾種創新: ? ? ? ? 1. 添加注意力機制(SE、CBAM等) ? ? ? ? 2. 修改可變形卷積(DySnake-主干c…

【改進YOLOv8】融合可變形大核注意力D-LKA-Attention的油氣管道設備泄露檢測系統

1.研究背景與意義 項目參考AAAI Association for the Advancement of Artificial Intelligence 研究背景與意義 隨著油氣管道設備的廣泛應用,油氣泄露問題已經成為一個嚴重的環境和安全隱患。油氣泄露不僅會造成環境污染,還可能引發火災、爆炸等嚴重事…

掌握vue中國際化使用及配置

文章目錄 🍁i18n組件安裝🍁項目中配置 vue-i18n🍁編寫語言包🍁國際化的使用 隨著互聯網的普及和全球化的發展,開發國際化的應用程序已經成為一種趨勢。因此,將 VUE 應用程序國際化是非常有必要的。 以下是…

新時代商業旨意:傳統商家如何變革?

隨著新時代的到來,商業環境也在不斷變化。在這個信息爆炸、消費者需求日益復雜化的時代,商業旨意已經不再僅僅是追求利潤,而是轉向了以客戶為中心,追求價值共創、社會責任等多元化的目標。傳統商家面臨著諸多挑戰,如何…

2023四川大學“騰訊杯”新生賽(同步賽)糖果(鴿巢原理)

這個數據范圍, n 是 1 e 6 , a i 也是 1 e 6 n是1e6,a_i也是1e6 n是1e6,ai?也是1e6,任意 a i a j ∈ [ 0 , 2 e 6 ] a_ia_j \in [0, 2e6] ai?aj?∈[0,2e6],所以如果有答案我們最多枚舉 2 e 6 2e6 2e6個數就可以找到…

視頻剪輯高手揭秘:如何批量減少時長并調整播放速度,提升視頻效果

隨著社交媒體的興起,視頻制作的需求越來越大。然而往往視頻文件存在一些問題,例如時長過長,或者要調整播放速度以更好地傳達信息。這些問題不僅影響了視頻的觀看體驗,也可能導致視頻難以在社交媒體上獲得廣泛的傳播。那么&#xf…

Android Canvas 改變背景顏色

我有一個有兩個 View 的應用 <com.myexample.ui.view.BackgroundView android:id"id/id_draw_canvas_classroom" android:layout_width"fill_parent" android:layout_height"fill_parent" android:layout_marginBottom"3dp" andro…

[EFI]Atermiter X99 Turbo D4 E5-2630v3電腦 Hackintosh 黑蘋果efi引導文件

硬件型號驅動情況主板 Atermiter X99 Turbo D4 處理器 Intel Xeon E5-2630v3 已驅動內存Desktop DDR4 2666 MHz已驅動硬盤Netac NV7000已驅動顯卡AMD Radeon RX 5700xt已驅動聲卡瑞昱 英特爾 High Definition Audio 控制器ALC897已驅動網卡LucyRTL8125已驅動無線網卡藍牙Broad…

基于Java個人作品管理系統

基于Java個人作品管理系統 功能需求 1、作品上傳&#xff1a;系統允許用戶上傳各種類型的作品&#xff0c;如文字、圖片、音頻、視頻等。上傳過程應簡單明了&#xff0c;支持批量上傳。 2、作品分類&#xff1a;系統需要提供作品分類功能&#xff0c;用戶可以根據自己的需求…

CNN,DNN,RNN,GAN,RL+圖像處理常規算法(未完待續)

好的&#xff0c;讓我們先介紹一些常見的神經網絡模型&#xff0c;然后再討論圖像處理的常規算法。 神經網絡模型&#xff1a; 1. CNN&#xff08;卷積神經網絡&#xff09; 原理&#xff1a; CNN主要用于處理圖像數據。它包含卷積層、池化層和全連接層。卷積層通過卷積操作…

文件夾重命名:提升工作效率,使用關鍵詞替換法重命名文件夾

在日常生活和工作中&#xff0c;經常要處理大量的文件夾和文件。有時候&#xff0c;為了更好地管理和查找文件&#xff0c;要給文件夾重新命名。但是&#xff0c;重命名文件夾并不是一件容易的事情&#xff0c;尤其是當文件夾數量眾多時。一個一個修改耗費極大的時間和精力&…

《C++新經典設計模式》之第19章 職責鏈模式

《C新經典設計模式》之第19章 職責鏈模式 職責鏈模式.cpp 職責鏈模式.cpp #include <iostream> #include <memory> #include <string> using namespace std;// 請求傳遞給鏈中的若干對象&#xff0c;哪個對象適合處理就自行處理 // 使多個對象都有機會處理請…

后端返回base64文件前端如何下載

1.后端返回base64格式文件 2.前端代碼 <style lang"less" scoped> import "./style/common.less";.table-div-a {color: #409EFF;text-decoration: underline;cursor: pointer; } </style><template><div class"template-con…

一文搞懂什么是Hadoop

Hadoop概念 什么是Hadoop Hadoop是一個由Apache基金會所開發的用于解決海量數據的存儲及分析計算問題的分布式系統基礎架構。 廣義上來說&#xff0c;Hadoop通常指一個跟廣泛的概念——Hadoop生態圈。 以下是hadoop生態圈中的技術&#xff1a; Hadoop優勢 hadoop組成 HDFS…

一個不錯的文章偽原創系統程序源碼

一款文章偽原創系統程序源碼免費分享&#xff0c;程序是站長原創的。 一共花了站長幾天時間寫的這個文章偽原創平臺&#xff0c;程序無需數據庫。 程序前端采用BootStrap框架搭建&#xff0c;后端采用PHP原生書寫。 前端偽原創采用Ajax無刷新提交&#xff0c;Ajax轉換到詞庫…