日日夜夜精品视频天天综合网I成人一级片免费看I久久久精品I久草视频免费看I中文字幕亚洲欧美I久久综合免费视频I中文字幕一区二I免费看片在线观看

網(wǎng)站開發(fā) APP開發(fā) 小程序開發(fā) SEO優(yōu)化 公司新聞

Java枚舉類型原理

2018-05-18 10:14:28
2177

  枚舉(Enum)類型是 java 5 中新增的一種數(shù)據(jù)類型,它能夠幫助我們更加快捷和安全的實(shí)現(xiàn)枚舉。

  回想之前我們?cè)诙x枚舉常量時(shí)的做法:

  這樣的定義方式雖然也能正常工作,但卻存在許多不足,比如不小心把 MONDAY 和 TUESDAY 都置為 2 時(shí),編譯器并不會(huì)報(bào)錯(cuò),但是卻很難進(jìn)行排查。

  在 Java 5 之后,我們可以用如下的定義定義枚舉類型。并可以在程序中通過 的方式使用,這無疑大大提高了程序的安全性。

  我們知道,編程語言的設(shè)計(jì)具有前向兼容性,這意味著后續(xù)的語言特性實(shí)際上都是通過語法糖來實(shí)現(xiàn)的,那么枚舉類型的內(nèi)部實(shí)現(xiàn)原理是怎么樣的呢?我們通過將上面的枚舉類 Day 通過 命令進(jìn)行反編譯,再將反編譯的代碼通過改寫使其更加容易閱讀,最終得到下面的反編譯代碼。
 

  通過閱讀上面的反編譯后代碼,我們可以對(duì)枚舉類型的實(shí)現(xiàn)進(jìn)行總結(jié):

  枚舉類型是通過繼承 Enum 類來實(shí)現(xiàn)的,并且最終生成 final 類來強(qiáng)化不可變性。

  枚舉類型的構(gòu)造函數(shù)為私有的,具有 String 和 int 兩個(gè)參數(shù),分別代表枚舉的名稱和序號(hào),序號(hào)按照定義的順序從小到大排列。

  每一個(gè)枚舉都代表一個(gè)枚舉類事例,并且為 static 和 final,在枚舉類的靜態(tài)代碼塊中進(jìn)行初始化,并且有一個(gè) $VALUES 數(shù)組保存所有的枚舉。

  通過 valueOf 方法可以完成枚舉名稱到枚舉對(duì)象的查找。

  VALUES()方法返回的是 VALUES 數(shù)組被篡改。

  接下來,我們來分析一下自定義枚舉類型所繼承的 Enum 類

  通過閱讀上面的 Enum 抽象類,我們可以對(duì)其特點(diǎn)進(jìn)行總結(jié):

  由 equals 方法可知每個(gè)枚舉只與自身相等,沒有等效相等的枚舉。

  由 clone 方法可知枚舉對(duì)象不允許克隆,這能保證每一個(gè)枚舉都是唯一的。

  由 compareTo 方法可知枚舉只能與同類型的枚舉相比較,返回結(jié)果為枚舉的順序之差。

  由 finalize 方法可知枚舉類不允許實(shí)現(xiàn) finalize 方法,這與枚舉的安全性有關(guān)。

  由 readObject 方法和 readObjectNoData 方法可知枚舉對(duì)象不允許反序列化,這也能保證每一個(gè)枚舉都是唯一的。

  由以上的分析我們可以發(fā)現(xiàn),枚舉的最大特點(diǎn)就是唯一性,同時(shí)可以發(fā)現(xiàn)只有單個(gè)元素的枚舉在不經(jīng)意間符合了單例模式的要求,具體為:

  枚舉類為不可變類,這防止了單例類被繼承。

  枚舉類型的構(gòu)造函數(shù)為私有的,因此不能主動(dòng)創(chuàng)建對(duì)應(yīng)的單例對(duì)象。

  枚舉的元素為 public static final 類型,并且在類加載的時(shí)候在靜態(tài)代碼塊內(nèi)完成了初始化,這相當(dāng)于單例模式的惡漢模式。

  枚舉類對(duì)象不允許克隆,這能保證每一個(gè)單例都是唯一的。

  枚舉類對(duì)象不可反序列化,這也能保證每一個(gè)單例都是唯一的。

  因此我們可以使用單元素的枚舉類型來實(shí)現(xiàn)單例模式。事實(shí)上,正如Effective Java一書中所說的:?jiǎn)卧氐拿杜e類型已經(jīng)成為實(shí)現(xiàn) Singleton 的最佳方法。

  注意:值得提出的時(shí),由以上的分析我們知道每一個(gè)枚舉都是一個(gè)對(duì)象,既然是對(duì)象,那么它所占的內(nèi)存就比基本類型大很多,這就是枚舉類型的缺點(diǎn),所以在Android開發(fā)中并不建議使用枚舉類型,而是使用等注解加上int或者String進(jìn)行替代。

?
主站蜘蛛池模板: 久久国产免费看 | 在线a人v观看视频 | av电影不卡在线 | 正在播放一区二区 | 91亚洲国产成人久久精品网站 | 久久久久久久国产精品影院 | 久久少妇免费视频 | 日韩二三区 | 精品欧美日韩 | 黄色三级视频片 | 99久久精品国产一区二区三区 | 国产三级久久久 | 深夜视频久久 | 中文字幕中文中文字幕 | 日韩欧美99 | 久久爽久久爽久久av东京爽 | 午夜视频99| 中文字幕一区在线 | 久久手机免费观看 | 三级黄色网址 | 欧洲亚洲国产视频 | 天天弄天天干 | 国产精品成人在线观看 | 欧美大片大全 | 国产xvideos免费视频播放 | 国产福利一区二区三区视频 | 国产精品高潮在线观看 | 96av视频 | 国产精品视频在线看 | 色视频在线免费 | 色a网| 免费观看黄色12片一级视频 | 日本在线视频网址 | 亚洲成人午夜av | 三级视频片 | 五月天久久久久久 | 亚洲精品久久久蜜桃直播 | 国产九九九视频 | 欧美日韩免费观看一区二区三区 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 综合铜03| 亚洲精品日韩在线观看 | 久草在线视频在线观看 | 国产一级片免费观看 | 久久国产免费看 | 久久久影片 | 免费看片网页 | 国产 日韩 在线 亚洲 字幕 中文 | 99视频网址| 欧美少妇的秘密 | 国内精品视频在线播放 | 中文字幕精品久久 | 日韩成人免费在线观看 | 日日爽天天操 | 999电影免费在线观看2020 | 国产美女主播精品一区二区三区 | 在线激情影院一区 | 中文在线亚洲 | 久久久久久免费网 | 国产视频在线观看一区 | 中文欧美字幕免费 | 中文字幕欧美日韩va免费视频 | 69视频国产 | 久免费 | www.色综合.com | 日韩和的一区二在线 | 天天操天天综合网 | 国产精品国产三级国产aⅴ入口 | 开心激情综合网 | 91精品国自产在线偷拍蜜桃 | 久久久久久美女 | 美女精品国产 | 日本最新中文字幕 | 综合网天天 | 精品专区一区二区 | 久久综合射 | 丝袜美腿在线视频 | 久久亚洲综合国产精品99麻豆的功能介绍 | 色婷婷福利视频 | 欧美精品第一 | 九九热在线免费观看 | 亚洲女欲精品久久久久久久18 | 日韩欧美精品在线 | 精品在线免费观看 | 深爱激情五月综合 | 天天操天天摸天天干 | 日本公妇在线观看 | 久久久久久久久久久高潮一区二区 | 欧美一区二区三区在线播放 | 91人人澡人人爽人人精品 | 欧美日韩精品久久久 | 国产精品6999成人免费视频 | 亚洲免费永久精品国产 | 五月香视频在线观看 | avav片| 久久久在线观看 | 热久久99这里有精品 | 日韩黄视频 | 亚洲一级片 |