国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Java中的枚舉類型存儲(chǔ)在Jvm運(yùn)行期的那個(gè)區(qū)域?為什么單例模式用枚舉就完美解決了?

瀏覽:97日期:2024-01-25 14:01:37

問題描述

Java中的枚舉類型是存儲(chǔ)在Java運(yùn)行期的那個(gè)區(qū)域?為什么單例模式用枚舉就完美解決了?

枚舉的內(nèi)存分配是發(fā)生在什么時(shí)候?初始化又是啥發(fā)生在什么時(shí)候?代碼中使用枚舉時(shí)候,發(fā)生了什么事情?

問題解答

回答1:

Java中枚舉存在在Method Area(方法區(qū))

public enum T { E1, E2}

上面這段代碼編譯后如下:

$ javap T.classCompiled from 'T.java'public final class io.zhudy.web.T extends java.lang.Enum<io.zhudy.web.T> { public static final io.zhudy.web.T E1; public static final io.zhudy.web.T E2; public static io.zhudy.web.T[] values(); public static io.zhudy.web.T valueOf(java.lang.String); static {};}

可以發(fā)現(xiàn)常量最后實(shí)際都是被編譯為靜態(tài)變量了,Java中靜態(tài)變量都是存儲(chǔ)在Method Area。

單例模式的目的是為了保證在內(nèi)存中只存在唯一一個(gè)實(shí)例,而枚舉值是固定的剛好可以達(dá)到控制實(shí)例數(shù)的目的

那傳統(tǒng)的采用class實(shí)現(xiàn)單例與enum不同之處呢,在于使用使用class需要將constructor訪問級(jí)別設(shè)置為private如果還要防止reflect繞過訪問控制創(chuàng)建對(duì)象,還需要做額外處理如下:

public class T2 { public static final T2 INSTANCE = new T2(); private T2() {if (INSTANCE != null) { throw new AssertionError('實(shí)例已存在');} } public static void main(String[] args) throws Exception {Constructor c = T2.class.getDeclaredConstructor();Object o = c.newInstance();System.out.println(o); }}

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 久爱综合 | 在线小毛片 | 日韩国产在线播放 | 欧美亚洲日本韩国一级毛片 | 91日本在线精品高清观看 | 日本无卡码一区二区三区 | 一级黄片毛片 | 夜鲁夜鲁夜鲁在线观看福利 | 亚洲成人在线免费观看 | 男女性男女刺激大片免费观看 | 亚洲网站在线观看 | 日本一级做人免费视频 | 久久久久久久性高清毛片 | 在线欧美精品一区二区三区 | 国产情侣真实露脸在线最新 | 国产欧美视频一区二区三区 | 99国产精品一区二区 | 黄网址在线看 | 狠狠色狠狠综合久久 | 欧美色欧 | 免费看一毛一级毛片视频 | 欧美日韩国产一区二区三区播放 | 欧美人与鲁交大毛片免费 | 另类专区国产在线视频 | 亚洲国产天堂久久综合网站 | 国产精品19禁在线观看2021 | 美女亚洲综合 | 狠狠色丁香久久婷婷综合_中 | 日本特黄特色大片免费看 | 成人免费高清视频网址 | 91久久在线| 美美女高清毛片视频免费观看 | 亚洲六月丁香六月婷婷蜜芽 | 国产在线高清不卡免费播放 | 国内成人精品视频 | 无码免费一区二区三区免费播放 | 久久久久久免费观看 | 国产真实女人一级毛片 | 久久zyz| 一区二区三区在线 | 在线观看人成网站深夜免费 |