Java面向?qū)ο蠡A(chǔ)知識(shí)之枚舉
一、枚舉的定義
枚舉是一組命名整型常量。枚舉類(lèi)型是使用enum關(guān)鍵字聲明的。
C# 枚舉是值類(lèi)型。換句話說(shuō),枚舉包含自己的值,且不能繼承或傳遞繼承。
二、枚舉的聲明
聲明枚舉的一般語(yǔ)法:
enum <enum_name> { enumeration list };
其中,
enum_name
指定枚舉的類(lèi)型名稱(chēng)。enumeration list
是一個(gè)用逗號(hào)分隔的標(biāo)識(shí)符列表。
枚舉列表中的每個(gè)符號(hào)代表一個(gè)整數(shù)值,一個(gè)比它前面的符號(hào)大的整數(shù)值。默認(rèn)情況下,第一個(gè)枚舉符號(hào)的值是 0.例如:
enum Day { Sun, Mon, tue, Wed, thu, Fri, Sat };
在編譯枚舉類(lèi)型時(shí),會(huì)把每個(gè)符號(hào)轉(zhuǎn)換成類(lèi)型的一個(gè)常量字段很一個(gè)int32的公共實(shí)例字段,不夠后者不能通過(guò)代碼調(diào)用。
因?yàn)槊杜e的符號(hào)是一個(gè)常量字段,如果在不同的程序集引用,可能會(huì)出現(xiàn)一些版本問(wèn)題,
每個(gè)枚舉都有一個(gè)基礎(chǔ)類(lèi)型, 包含 byte
,sbyte
,short
,ushort
,uint
,long
,ulong
, 和int
(最常用,C#默認(rèn)的類(lèi)型)
三、枚舉的轉(zhuǎn)換
枚舉轉(zhuǎn)換成整數(shù)
Day today = Day.Wed; int dayNumber = (int)today;
枚舉轉(zhuǎn)換成字符串
Day today = Day.Wed; string todayStr = today.ToString();
四、枚舉的方法
枚舉的主要三個(gè)方法:Enum.GetName()
、Enum.GetNames()
、Enum.GetValues()
Day today = Day.Wed; string name = Enum.GetName(typeof(Day), 3); Enum.GetNames(typeof(Day)) Enum.GetValues(typeof(Day))
GetName
:獲取單個(gè)枚舉的名稱(chēng)
GetNames
:獲取所有枚舉的名稱(chēng)
GetValues
:獲取所有枚舉的值
五、標(biāo)志枚舉(二進(jìn)制枚舉)
定義枚舉時(shí),添加Flags特性,之后便可以對(duì)這些值執(zhí)行AND、OR、NOT、XOR按位運(yùn)算
public enum MyEnum { MyEnum1 = 1, //0x1 MyEnum2 = 1 << 1, //0x2 MyEnum3 = 1 << 2, //0x4 MyEnum4 = 1 << 3, //0x8 MyEnum5 = 1 << 4, //0x10 MyEnum6 = 1 << 5, //0x20 MyEnum7 = 1 << 6 //0x40 }
此時(shí)可以使用位移運(yùn)算方便的獲取多個(gè)枚舉的組合變量:
MyEnum myEnum = MyEnum.MyEnum1 | MyEnum.MyEnum2; myEnum |= myEnum | MyEnum.MyEnum3;
或在組合中刪除其中一項(xiàng)枚舉:
myEnum ^= MyEnum.MyEnum1; myEnum &= ~MyEnum.MyEnum2;
需要判斷是否包含某一枚舉值時(shí),可以使用以下方法判斷:
(curMyEnum & MyEnum.Enum1) > 0
并集 &交集 ^差集
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
mall整合SpringSecurity及JWT認(rèn)證授權(quán)實(shí)戰(zhàn)下
這篇文章主要為大家介紹了mall整合SpringSecurity及JWT認(rèn)證授權(quán)實(shí)戰(zhàn)第二篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Java實(shí)現(xiàn)4種微信搶紅包算法(小結(jié))
微信紅包是大家經(jīng)常使用的,到現(xiàn)在為止仍然有很多紅包開(kāi)發(fā)的需求,實(shí)現(xiàn)搶紅包算法也是面試常考題,本文就詳細(xì)的來(lái)介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2021-12-12springboot?maven?plugin報(bào)紅的解決辦法
本文主要介紹了springboot?maven?plugin報(bào)紅的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07java中將一個(gè)List等分成n個(gè)list的工具方法(推薦)
下面小編就為大家?guī)?lái)一篇java中將一個(gè)List等分成n個(gè)list的工具方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03簡(jiǎn)易JDBC框架實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了簡(jiǎn)易JDBC框架實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02spring boot starter actuator(健康監(jiān)控)配置和使用教程
這篇文章主要介紹了spring-boot-starter-actuator(健康監(jiān)控)配置和使用教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06Java自帶的加密類(lèi)MessageDigest類(lèi)代碼示例
這篇文章主要介紹了Java自帶的加密類(lèi)MessageDigest類(lèi)代碼示例,分享了常見(jiàn)的三種加密方式代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11java?Map接口子類(lèi)HashMap遍歷與LinkedHashMap詳解
這篇文章主要介紹了java?Map接口子類(lèi)HashMap遍歷與LinkedHashMap詳解,Map接口下的集合與Collection接口下的集合,它們存儲(chǔ)數(shù)據(jù)的形式不同,感興趣的小伙伴可以參考下面文章詳細(xì)內(nèi)容介紹2022-06-06