日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

《Effective Java》第8章 通用程序设计

發布時間:2025/5/22 java 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Effective Java》第8章 通用程序设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第47條:了解和使用類庫

Top 100 Java Libraries on Github 2016

Library Number of Projects Type % of projects
junit.junit 2412 Testing 62.45% Total Projects Tested 3,862
org.slf4j.slf4j-api 895 Logging 23.17% Unique Repos Used 12,059
com.google.guava.guava 650 Utilities 16.83% Total Records 47,251
log4j.log4j 615 Logging 15.92% Avg. repos per project 12.23
commons-io.commons-io 537 Utilities 13.90%
org.slf4j.slf4j-log4j12 479 Logging 12.40%
org.mockito.mockito-all 394 Mocks 10.20%
commons-lang.commons-lang 369 Utilities 9.55%
ch.qos.logback.logback-classic 342 Logging 8.86%
org.apache.commons.commons-lang3 327 Utilities 8.47%
javax.servlet.servlet-api 323 Java Extension 8.36%
org.apache.httpcomponents.httpclient 295 Web 7.64%
org.springframework.spring-context 290 Utilities 7.51%
com.fasterxml.jackson.core.jackson-databind 277 Parsing 7.17%
commons-codec.commons-codec 260 Utilities 6.73%
org.mockito.mockito-core 260 Mocks 6.73%
org.springframework.spring-test 259 Testing 6.71%
joda-time.joda-time 248 Utilities 6.42%
com.google.code.gson.gson 246 Parsing 6.37%
org.testng.testng 234 Testing 6.06%

第48條:如果需要精確的答案,請避免使用float和double

float和double類型主要是為了科學計算和工程計算而設計的。它們執行二進制浮點運算( binary floating-point arithmetic ),這是為了在廣泛的數值范圍上提供較為精確的快速近似計算而精心設計的。然而,它們并沒有提供完全精確的結果,所以不應該被用于需要精確結果的場合。float和double類型尤其不適合用于貨幣計井,因為要讓一個float或者double精確地表示0.1(或者10的任何其他負數次方值)是不可能的。

遺憾的是,它輸出的結果是$0.61000000000000000001.

總而言之,對于任何需要精確答案的計算任務,請不要使用float或者double。如果你想讓系統來記錄十進制小數點,并且不介意因為不使用基本類型而帶來的不便,就請使用BigDecimal。使用BigDecima!還有一些額外的好處,它允許你完全控制舍人,每當一個操作涉及舍入的時候,它允許你從8種舍入模式中選擇其一。如果你正通過法定要求的舍入行為進行業務計算,使用Bigpecimal是非常方便的。如果性能非常關鍵,并且你又不介意自己記錄十進制小數點,而且所涉及的數值又不太大,就可以使用int或者long。如果數值范圍沒有超過9位{進制數字,就可以使用int;如果不超過18位數字,就可以使用long。如果數值可能超過18位數字,就必須使用BigDecimal.

第49條:基本類型優先于裝箱基本類型

這個程序運行起來比預計的要慢一些,因為它不小心將一個局部變量(sum)聲明為是裝箱基本類型Long, 而不是基本類型long. 程序編譯起來沒有錯誤或者警告,變量被反復地裝箱和拆箱,導致明顯的性能下降。

那么什么時候應該使用裝箱基本類型呢?它們有幾個合理的用處。第一個是作為集合中的元素、鍵和值。你不能將基本類型放在集合中,因此必須使用裝箱基本類型。這是一種更通用的特例。在參數化類型中,必須使用裝箱基本類型作為類型參數,因為Java不允許使用基本類型。例如,你不能將變量聲明為ThreadLocal類型,因此,必須使用ThreadLocal代替。最后,在進行反射的方法調用(見第53條)時,必須使用裝箱基本類型。

第50條:如果其他類型更適合,則盡量避免使用字符串

經常被錯誤地用字符串來代替的類型包括基本類型、枚舉類型和聚集類型。

  • 宇符串不適合代替其他的值類型。

  • 字符串不適合代替枚舉類型。

  • 字符串不適合代替聚集類型。
    如果一個實體有多個組件,用一個字符串來表示這個實體通常是很不恰當的。例如,下面這行代碼來自于真實的系統—標識符的名稱已經被修改了,以免發生糾紛:

這種方法有許多缺點。如果用來分隔域的字符也出現在某個域中,結果就會出現混亂。為
了訪問單獨的域,必須解析該字符串,這個過程非常慢,也很繁瑣,還容易出錯。你無法提供equals, toString或者compareTo方法,只好被迫接受String提供的行為。更好的做法是,簡單地編寫一個類來描述這個數據集,通常是一個私有的靜態成員類(見第22條).

第53條:接口優先千反射機制

核心“反封機制(core reflection facility) java.lang.reflect, 提供了“通過程序來訪問關于已裝載的類的信息”的能力。給定一個CIass實例,你可以獲得Constructor, Method和Field實例,分別代表了該Class實例所表示的類的Constructor(構造器)、Method(方法)和Field(域)。這些對象提供了“通過程序來訪問類的成員名稱、域類型、方法簽名等信息”的能力。

而且,Constructor, Method和Field實例使你能夠通過反扮機制操作它們的底層對等體:通過調用Constructor, Method和Field實例上的方法,可以構造底層類的實例、調用底層類的方法,并訪問底層類中的域。例如,Method.invoke使你可以調用任何類的任何對象上的任何方法(遵從常規的安全限制)。反射機制(reflection)允許一個類使用另一個類,即使當前者被編譯的時候后者還根本不存在。然而,這種能力也要付出代價:

  • 喪失了編譯時類型檢查的好處
    包括異常檢查。如果程序企圖用反射方式調用不存在的或者不可訪問的方法,在運行時它將會失敗,除非采取了特別的預防措施.
  • 執行反射訪問所需要的代碼非常笨拙和冗長
    編寫這樣的代碼非常乏味,閱讀起來也很困難。
  • 性能損失
    反射方法調用比普通方法調用慢了許多。具體慢了多少,這很難說,因為受到了多個因素的影響。在我的機器上,速度的差異可能小到2倍,也可能大到50倍。

有一些復雜的應用程序需要使用反射機制。這些示例中包括類瀏覽器、對象監視器、代碼分析工具、解釋型的內嵌式系統。在RPC(遠程過程調用)系統中使用反射機制也是非常合適的。

第54條:謹慎地使用本地方法

Java Native Interface (JNI)允許Java應用程序可以調用本地方法( native method ) ,所謂本地方法是指用本地程序設計語言(比如C或者C++)來編寫的特殊方法。本地方法在本地語言中可以執行任意的計算任務,并返回到Java程序設計語言。

從歷史上看,本地方法主要有三種用途。它們提供了“訪問特定于平臺的機制”的能力,比如訪問注冊表(registry)和文件鎖(file lock)。它們還提供了訪問遺留代碼庫的能力,從而可以訪問遺留數據(legacy data)。最后,本地方法可以通過本地語言,編寫應用程序中注重性能的部分,以提高系統的性能。

使用本地方法來提高性能的做法不值得提倡
使用本地方法有一些嚴重的缺點口因為本地語言不是安全的,所以,使用本地方法的應用程序也不再能免受內存毀壞錯誤的影響。因為本地語言是與平臺相關的,使用本地方法的應用程序也不再是可自由移植的。使用本地方法的應用程序也更難調試。在進入和退出本地代碼時,需要相關的固定開銷,所以,如果本地代碼只是做少量的工作,本地方法就可能降低(decrease)性能。最后一點,需要“膠合代碼”的本地方法編寫起來單調乏味,并且難以閱讀。

第56條:遵守普遍接受的命名慣例

對于首字母縮寫。到底應該全部大寫還是只有首字母大寫,沒有統一的說法。雖然大寫更常見一些,但還是強烈建議采用僅有首字母大寫的形式:即使連續出現多個首字母縮寫的形式,你仍然可以區分出一個單詞的起始處和結束處。
下面這兩個類名你更愿意看到哪一個,HTTPURL還是HttpUrl ?

類型參數名稱通常由單個字母組成。這個字母通常是以下五種類型之一:T表示任意的類型,E表示集合的元素類型,K和V表示映射的鍵和值類型,X表示異常。任何類型的序列可以是T, U, V或者T1, T2, T3.

對于返回boolean值的方法。其名稱往往以單詞“is”開頭,很少用has。

轉載于:https://www.cnblogs.com/myitroad/p/7614710.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的《Effective Java》第8章 通用程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 淫视频网站 | 国产a毛片 | 国产精品久久久久久免费观看 | 双乳被四个男人吃奶h文 | 久久久久亚洲av无码专区首jn | 青青草伊人网 | 天天天天躁天天爱天天碰2018 | 亚洲第六页 | 天堂俺去俺来也www久久婷婷 | 吞精囗交69激情欧美 | 亚洲va久久久噜噜噜久久天堂 | 亚洲天堂手机在线观看 | 青青草原综合久久大伊人精品 | 91日本视频| 交hdsexvideos娇小 | 亚洲欧美系列 | 欧美三p | 午夜777| 在线毛片观看 | 1000部国产精品成人观看 | 欧美专区一区 | 国产一级片久久 | 久久久永久久久人妻精品麻豆 | 日本成人在线视频网站 | 亚洲av无码成人精品国产 | 在线观看中文字幕亚洲 | 亚洲精品久久久久久无码色欲四季 | 日大逼 | 中文字幕人成乱码熟女香港 | 国产午夜精品在线观看 | 亚洲中文字幕无码不卡电影 | 日韩毛片在线 | 亚州av网站 | 欧美精品综合 | 91操人视频 | 自拍视频在线播放 | 天堂av在线免费 | 国产视频1区2区 | 亚洲一本二本 | 国产第一页在线观看 | 巨乳动漫美女 | 夜夜草av| www.av在线.com| 国产日韩网站 | 久久久久久免费观看 | 四级黄色片 | 污片在线观看 | 丁香婷婷综合激情 | 综合网在线视频 | 国产精品久久久久久久久免费软件 | 精品一区二区三区视频 | 青青草毛片 | 亚洲第一色网 | 91视频免费播放 | 欧美亚洲日本一区 | 四虎影库 | 成年人小视频 | av最新版天堂资源在线 | 在线aaa| 久久一区精品 | www.婷婷.com | 玉足女爽爽91 | 在线国产一区二区三区 | 四虎永久网址 | 影音先锋波多野结衣 | 伊人成人在线视频 | 舔花蒂| 一区二区三区在线观看免费视频 | 欧洲精品在线播放 | 不卡视频在线 | av网站国产| 亚洲天堂一区二区三区四区 | 久久丫丫 | 欧美 日韩 视频 | 国产精品另类 | 日韩精品一区二区在线看 | 日本免费黄色片 | 伊人久艹 | 亚洲精品国产精品乱码不卡√香蕉 | 日韩特黄毛片 | 中国毛片基地 | 一区二区三区在线播放 | 91尤物国产福利在线观看 | 国产九九九九九 | 夜夜草天天草 | 久久精品一区二区三 | 午夜影院免费看 | 日本黄色大片免费看 | 深爱激情综合网 | 亚洲成人激情小说 | 免费网站在线高清观看 | 婷婷中文在线 | 亚洲区小说区图片区qvod | 懂色aⅴ一区二区三区免费 国产精品99在线观看 | 国产精品300页 | 国产女主播自拍 | 天天色天天射综合网 | 中文字幕h | 成人h动漫精品一区二区 |