中文字幕精品亚洲一区,久久影音先锋每日资源网站,国产精品女在线观看,国产AⅤ久久免费精品,久久网性爱视频,国产制服丝袜美腿AV电影,日干夜啪,久久国产高清字幕中文,免费人成网在线,亚洲制服久久精品一区,国产盗摄宾馆不卡一区二区,真实播放国产乱子伦视频,先锋色资源在线视频,美女XX00动态图120秒,AV天堂永久资源防屏蔽网址,国产白丝美腿娇喘高潮的视频,成 人影片 免费观看10分钟

您的位置: 首頁 > 公司公告

Java中單例模式與靜態(tài)類的區(qū)別

來源:南京華信智原  |  發(fā)布時間:2016-05-05  |  瀏覽量:1556

 單例模式與靜態(tài)類(一個類

,所有方法為靜態(tài)方法)是另一個非常有趣的問題
,由于單例模式和靜態(tài)類都具有良好的訪問性
,它們之間有許多相似之處,例如
,兩者可以直接使用而無須創(chuàng)建對象,都可提交唯一實例
,在一個非常高的高度上看起來它們都為是用于同樣的任務(wù)。那么Java中單例模式與靜態(tài)的區(qū)別有哪些呢

  接下來,我們會了解什么Java中的什么地方使用單例模式

,什么時候使用靜態(tài)類更好
,順便說下
,JDK中有幾個關(guān)于兩者的例子
,并且這例子非常聰明的
,例如java.lang.Math是一個final類
,并且其方法為靜態(tài)方法,另一方面java.lang.Runtime是一個單例的類
。對于那些不熟悉單例模式或靜態(tài)類的人
,靜態(tài)類就是一個Java類,它僅包含靜態(tài)方法
,一個非常好靜態(tài)類的例子就是java.lang.Math,它包括了許多為不同數(shù)據(jù)功能實現(xiàn)工具方法
,例如sqrt(),而單例類
,在整個應(yīng)用生命周期內(nèi)只有一個實例
,例如java.lang.Runtime。

Java中單例模式與靜態(tài)類的區(qū)別

什么時候在Java中使用靜態(tài)類替換單例

  確實存在一些場景

,靜態(tài)類比單例更適合,這個場景中主要的一個例子就是java.lang.Math
,它不是單例的,其所有方法都是靜態(tài)方法
,這里我給出幾個場景
,我覺得使用靜態(tài)類比單例模式更適合。

  1)如果你的單例不需要維護任何狀態(tài)

,僅僅提供全局訪問的方法
,這種情況考慮使用靜態(tài)類
,靜態(tài)方法比單例更快,因為靜態(tài)的綁定是在編譯期就進行的
。但是要記住
,不建議在靜態(tài)類中維護狀態(tài)信息
,特別是在并發(fā)環(huán)境中
,若無適當(dāng)?shù)耐酱胧┒薷亩嗑€程并發(fā)時,會導(dǎo)致壞的競態(tài)條件

  如果你需要將一些工具方法集中在一起時,你可以選擇使用靜態(tài)方法

,但是別的東西,要求單例訪問資源時
,應(yīng)該使用單例模式

  Java中單例與靜態(tài)的區(qū)別

  它們基本的區(qū)別一個表現(xiàn)類,一個表現(xiàn)方法

,下面列幾條它們之間的區(qū)別。

  1)靜態(tài)類比單例具有更好的性能

,因為靜態(tài)方法在編譯期綁定。

  2)再次

,它們的區(qū)別是override的能力,因Java中的靜態(tài)方法是不可以覆蓋的
,這就導(dǎo)致其木有太多的靈活性
,另一面
,你可通過繼承的方式覆蓋單例類中定義的方法。

  3)靜態(tài)類很難模擬

,因此難于單例測試
,單例更容易模擬,因為也比靜態(tài)類易于編寫單元測試
,不論什么單例期望什么,你都可以傳遞模擬對象
,例如構(gòu)造方法或方法參數(shù)。

  4)如果你的需求中需要維護狀態(tài)信息

,則單例比靜態(tài)類更適合
,因為后者在維護狀態(tài)信息方面是非?div id="jpandex" class="focus-wrap mb20 cf">?膳碌模?dǎo)致狡滑的bug

  5)如果是一個非常重的對象

,單例可以懶加載,但是靜態(tài)類沒有這樣的優(yōu)勢
,并且非常熱切的加載。

  6)許多依賴注入的框架對單例都有良好的管理

,例如Spring
,使用它們非常容易。

  兩者之間的這些區(qū)別

,有助于我們在面對一些場景時做出選擇
,下一節(jié)中了解什么時候選擇單例而不是靜態(tài)類

  Java中,選擇單例而不是靜態(tài)類的優(yōu)點

  單例與靜態(tài)主要的優(yōu)點是前者比后者更具有面向?qū)ο蟮哪芰?div id="m50uktp" class="box-center"> ,使用單例

,可以通過繼承和多態(tài)擴展基類,實現(xiàn)接口和更有能力提供不同的實現(xiàn)
,如果我們討論java.lang.Runtime
,在Java中它是單例
,調(diào)用getRuntime()方法,會基于不同的JVM返回不同的實現(xiàn)
,但也保證了每個JVM中實有一個實例
,如果java.lang.Runtime是一個靜態(tài)類
,不太可能因不同的JVM返回不同的實現(xiàn)。

  這就是Java中單例與靜態(tài)類的區(qū)別

,當(dāng)你需要一個全OO能力的對象時
,選擇單例,如果僅僅是將一些靜態(tài)方法預(yù)售
,使用靜態(tài)類

  • 行業(yè)新聞
  • 就業(yè)新聞

1【行業(yè)秘笈】2024 年平面設(shè)計趨勢有哪些?

2【職場秘笈】前端和后端究竟有什么區(qū)別

?到底應(yīng)該怎么選呢?

3【職場秘笈】面對職業(yè)“低谷”期

,除了焦慮
、抱怨,我們還能做些什么

4【職場秘籍】沒靈感,設(shè)計總監(jiān)是怎么設(shè)計Logo的?

5華信智原春季師資培訓(xùn)圓滿落幕|技術(shù)賦能教學(xué)

,助推品質(zhì)課堂

6【職場秘笈】學(xué)會這幾招

,再也不用為簡歷的項目經(jīng)歷發(fā)愁!

7【職場秘笈】為什么很多企業(yè)喜歡有乙方經(jīng)驗的員工

8【職場秘籍】大廠員工薪資曝光,小編的要被亮瞎了

友情鏈接 :智原在線

華信智原(重慶中心)|渝ICP備11007570號-2|咨詢熱線:18983147089|地址: 重慶市渝北區(qū)金開大道106號互聯(lián)網(wǎng)產(chǎn)業(yè)園一期6棟3層1-2號|版權(quán)所有:重慶華信智原教育科技有限公司