电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java基礎之枚舉Enum類案例詳解

瀏覽:112日期:2022-08-13 10:59:16
一、文章序言

Java中引用類型:數組、類、接口、枚舉、注解

枚舉這個既熟悉又陌生的東西具體再哪里可以使用呢?

Java基礎之枚舉Enum類案例詳解

什么是枚舉?

枚舉是一個引用類型,枚舉就是一個規定了取值范圍的變量類型。

枚舉變量不能使用其他的數據,只能使用枚舉中常量賦值。提高程序安全性;

//格式: public enum 枚舉名{ //枚舉的取值范圍 //枚舉中可以生命方法 }

枚舉的使用場景介紹?

1、最常見的情況如星期,相關變量我們會在Java里面重復使用,在這里我們就可以來定義一個叫做“星期”的枚舉。

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

如果不定義成枚舉,各位的寫法就千奇百怪了,比如“周一”、“星期一”、“Monday”等,寫法千奇百怪,定義枚舉一目了然。

2、比如說季節的春夏秋冬,我們同樣可以定義一個這樣的變量來存儲對應的季節。

public enum Season { SPRING, SUMMER, AUTUMN, WINTER;}

3、英雄聯盟里面,有很多職業,比如說”戰士“、”法師“、”射手“……等職業。我們就可以定義一個叫”職業“的枚舉類型;后臺再其它地方哪里需要直接引用即可;

總結:枚舉里面定義的就相當于是已經生成且固定的對象,你可以直接使用;如果Java代碼里面與如上需要定義的常量可以直接定義一個枚舉類;

Java基礎之枚舉Enum類案例詳解

定義枚舉類型時本質上就是定義一個類別,只不過很多細節由編譯器幫我們完成了,所以某些程度上,enum關鍵字的作用 就像是class或interface

1 枚舉的本質:其實就是終止類,并繼承Enum抽象類。

2 枚舉中的變量,其實就是一個當前類型的靜態常量。

解釋:

當我們使用“enum”定義枚舉類型時,實質上我們定義出來的類型繼承自java.lang.Enum類型,而枚舉的成員其實就是我們定義的枚舉類型的一 個實例(Instance),他們都被預設為final,所以我們無法改變他們,他們也是static成員,所以我們可以通過類型名稱直接使用他們,當然最重要的,他們都是公開的(public)。

二、代碼實踐

先定義一個枚舉:季節枚舉

//聲明一個表示季節的枚舉public enum Season { SPRING, SUMMER, AUTUMN, WINTER;}

枚舉可以搭配switch語句使用:案例如下

public class TestSeasonEnum { public static void main(String[] args) {Season season = Season.SPRING;//switch小括號中的表達式類型可以是枚舉類型switch(season){ //每個case后的常量直接寫枚舉的取值范case SPRING: System.out.println('春天'); break;case SUMMER: System.out.println('夏天'); break;case AUTUMN: System.out.println('秋天'); break;case WINTER: System.out.println('冬天'); break;} }}

輸出結果

春天

為了加深理解,再舉例一個錯誤的用法

​ An enum switch case label must be the unqualified name of an enumeration constantJava基礎之枚舉Enum類案例詳解

注意,在switch中,不能使用枚舉類名稱,因為編譯器會根據switch()的類型來判定每個枚舉類型,在case中必須直接給出與()相同類型的枚舉選項,而不能再有類型。

Java基礎之枚舉Enum類案例詳解

代碼如上可以直接測試,建議實測

三、面試相關

來來來,剛好抽時間一起整理一下常見面試問題吧,然后相關解析已經附上詳細代碼學習,實踐實踐再實踐!

Java基礎之枚舉Enum類案例詳解

1.枚舉允許繼承類嗎?

枚舉類使用enum定義后在編譯后默認繼承了java.lang.Enum類,而不是普通的繼承Object類。enum聲明類繼承了Serializable和Comparable兩個接口。且采用enum聲明后,該類會被編譯器加上final聲明(同String),故該類是無法繼承的。

所有枚舉類都默認是Enum類的子類,無需我們使用extends來繼承。

2.枚舉允許實現接口嗎?

枚舉允許實現接口。因為枚舉本身就是一個類,類是可以實現多個接口的。

public interface EnumInterface { public abstract void print();}

public enum SizeEnum implements EnumInterface{ BIG,MIDDLE,SMALL; @Override public void print() {System.out.println('繼承接口-重寫方法一次'); }}

3.枚舉可以用等號比較嗎?

肯定,因為在Enum類里面,已經重寫了equals方法,而方法里面比較就是直接使用==,來比較2個對象的。所以,你在外邊直接使用==也是可以的。

Java基礎之枚舉Enum類案例詳解

4.可以繼承枚舉嗎?

當然不能呀,枚舉類默認繼承了java.lang.Enum類,一個類怎么能繼承兩個類呢?

5.枚舉可以實現單例模式嗎?

枚舉本身就是一種對單例設計模式友好的形式,它是實現單例模式的一種很好的方式。

public class InstanceDemo { /** * 構造方法私有化 */ private InstanceDemo(){ } /** * 返回實例 * @return */ public static InstanceDemo getInstance() {return Singleton.INSTANCE.getInstance(); } /** * 使用枚舉方法實現單利模式 */ private enum Singleton {INSTANCE;private InstanceDemo instance;/** * JVM保證這個方法絕對只調用一次 */Singleton() { instance = new InstanceDemo();}public InstanceDemo getInstance() { return instance;} }//測試一下 public static void main(String[] args) {InstanceDemo one = InstanceDemo.getInstance();InstanceDemo two = InstanceDemo.getInstance();System.out.println(one);System.out.println(two);System.out.println(one == two); }}

創建的對象相同

csdn.test.recursion.demo.InstanceDemo@74a14482csdn.test.recursion.demo.InstanceDemo@74a14482true

6.當使用compareTo()比較枚舉時,比較的是什么?

int compareTo(E e):比較兩個枚舉常量誰大誰小,其實比較的就是枚舉常量在枚舉類中聲明的順序;返回值可以仔細看看源碼;

一起看看,底層代碼吧

public final int compareTo(E o) {Enum<?> other = (Enum<?>)o;Enum<E> self = this;if (self.getClass() != other.getClass() && // optimization self.getDeclaringClass() != other.getDeclaringClass()) throw new ClassCastException();return self.ordinal - other.ordinal; }

舉個例子你就能理解了

public class TestSeasonEnum { public static void main(String[] args) { Season season = Season.SPRING;Season season1 = Season.SUMMER;Season season2 = Season.AUTUMN;Season season3 = Season.WINTER;System.out.println(season.compareTo(season1));System.out.println(season.compareTo(season2));System.out.println(season.compareTo(season3)); }}

輸出結課,詳情參考源碼一看便知道

-1-2-3

7. 當使用equals()比較枚舉的時候,比較的是什么?

枚舉類型的equals()方法比較的是枚舉類對象的內存地址,作用與等號等價。

到此這篇關于Java基礎之枚舉Enum類案例詳解的文章就介紹到這了,更多相關Java枚舉Enum類內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 最新电影-好看的电视剧大全-朝夕电影网| 网站建设-临朐爱采购-抖音运营-山东兆通网络科技 | 华溶溶出仪-Memmert稳定箱-上海协烁仪器科技有限公司 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 「安徽双凯」自动售货机-无人售货机-成人用品-自动饮料食品零食售货机 | 电梯乘运质量测试仪_电梯安全评估测试仪-武汉懿之刻 | 对照品_中药对照品_标准品_对照药材_「格利普」高纯中药标准品厂家-成都格利普生物科技有限公司 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 深圳装修_店面装修设计_餐厅设计_装修全包价格-尚泰装饰设计 | 铜镍-康铜-锰铜-电阻合金-NC003 - 杭州兴宇合金有限公司 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | 青岛美佳乐清洁工程有限公司|青岛油烟管道清洗|酒店|企事业单位|学校工厂厨房|青岛油烟管道清洗 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 冷水机,风冷冷水机,水冷冷水机,螺杆冷水机专业制造商-上海祝松机械有限公司 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 三佳互联一站式网站建设服务|网站开发|网站设计|网站搭建服务商 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 缝纫客| 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 电位器_轻触开关_USB连接器_广东精密龙电子科技有限公司 | 视频教程导航网_视频教程之家_视频教程大全_最新视频教程分享发布平台 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 春腾云财 - 为企业提供专业财税咨询、代理记账服务 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 动力配电箱-不锈钢配电箱-高压开关柜-重庆宇轩机电设备有限公司 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 盘煤仪,盘料仪,盘点仪,堆料测量仪,便携式激光盘煤仪-中科航宇(北京)自动化工程技术有限公司 | 回转支承-转盘轴承-回转驱动生产厂家-洛阳隆达轴承有限公司 | 岸电电源-60HZ变频电源-大功率变频电源-济南诚雅电子科技有限公司 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 智能终端_RTU_dcm_北斗星空自动化科技 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 物流公司电话|附近物流公司电话上门取货 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 |