1. 程式人生 > >Effective Java讀書筆記(第8章-通用程式設計)

Effective Java讀書筆記(第8章-通用程式設計)

     第8章  通用程式設計

     第45條:講區域性變數的作用域最小化

     要使區域性變數的作用域最小化,最有力的方法就是在第一次使用它的地方宣告。

     如果在迴圈終止之後不再需要迴圈變數的內容,for迴圈優先於while迴圈。

     for迴圈比while迴圈更簡短,從而增強了可讀性。

     第46條:for-each迴圈優先於傳統的for迴圈

private static void doSomething(String str){
		System.out.println(str);
	}
	
	public static void main(String[] args) {
		List<String> c= new ArrayList<String>();
		c.add("1");
		c.add("2");
		c.add("3");
		c.add("4");
		c.add("5");
		//Iterator used to collection!
		for(Iterator<String> i = c.iterator(); i.hasNext();){
			doSomething((String)i.next());
		}
		
		String[] a = {"a", "b", "c", "d", "e"};
		//for used for array!
		for(int i = 0; i< a.length; i++){
			doSomething(a[i]);
		}
		//for-each used for collection and array!
		for(String i : c){
			doSomething(i);
		}
		for(String i : a){
			doSomething(i);
		}
	}
     for-each迴圈不會有效能損失,甚至用於陣列也一樣。

     以下三種情況不能使用for-each迴圈:

     1. 過濾——如果需要遍歷集合,並刪除選定的元素,就需要使用顯式的迭代器,以便可以呼叫它的remove方法。

     2. 轉換——如果需要遍歷列表或者陣列,並取代它部分或者全部的元素值,就需要列表迭代器或者陣列索引,以便設定元素的值。

     3. 平行迭代——如果需要並行地遍歷多個集合,就需要顯式地控制迭代器或者索引遍歷,以便所有迭代器或者索引變數都可以同步前移。

     第47條:瞭解和使用類庫

     每個程式設計師都應該熟悉java.lang、java.util,最好還有java.io的內容。

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

     float和double執行二進位制浮點運算,它們並沒有提供完全精確的結果,所以不應該被用於需要精確結果的場合。float和double型別尤其不適合用於貨幣計算,因為要讓一個float或者double精確地表示0.1是不可能的。解決計算貨幣問題,使用BigDecimal、int或者long進行貨幣計算。

     如果數值範圍沒有超過9位十進位制數字,就可以使用int,如果不超過18位數字,就可以使用long,如果可能超過18位數字,就必須使用BigDecimal。

     第49條:基本型別優先於裝箱基本型別

     java中的同一性:兩個引用指向同一個物件;java的等同性:兩個引用指向的物件,在邏輯上相等。

     java有基本型別和引用型別兩種,每個基本型別都有一個對應的引用型別,稱作裝箱基本型別。

     基本型別和裝箱基本型別的三個主要區別。第一,基本型別只有值,而裝箱基本型別則具有與它們的值不同的同一性。第二,基本型別只有功能完備的值,而每個裝箱基本型別除了它對應基本型別的所有功能之外,還有個非功能值:null。最後一點區別是,基本型別通常比裝箱基本型別要節省時間和空間。

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

     字串不適合代替其他的值型別;字串不適合代替列舉型別;字串不適合代替聚集型別;字串也不適合代替能力表。

     第51條:當心字串連線的效能

     為連線n個字串而重複地使用字串連線操作符,需要n的平方級的時間。當兩個字串被連線在一起時,它們的內容都要被拷貝。為了獲得可以接受的效能,請使用StringBuilder代替String。

     第52條:通過介面引用物件

     第53條:介面優先於反射機制

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

     第55條:謹慎地進行優化

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

相關推薦

Effective Java讀書筆記8-通用程式設計

     第8章  通用程式設計      第45條:講區域性變數的作用域最小化      要使區域性變數的作用域最小化,最有力的方法就是在第一次使用它的地方宣告。      如果在迴圈終止之後不再需要迴圈變數的內容,for迴圈優先於while迴圈。      for迴圈比

Effective Java讀書筆記10-併發

     第10章  併發      第66條:同步訪問共享的可變資料      第67條:避免過度同步      第68條:executor和task優先於執行緒      第69條:併發工具優先於wait和notify      第70條:執行緒安全性的文件化   

Effective Java讀書筆記9-異常

     第9章  異常      第57條:只針對異常的情況才使用異常      設計良好的API不應該強迫它的客戶端為了正常的控制流而使用異常。異常是為了在異常情況下使用而設計的,不要將它們用於普通的控制流,也不要編寫迫使它們這麼做的API。 String[] str

Effective Java 2 讀書筆記 8 通用程式設計

第45條:將區域性變數的作用域最小化 要使區域性變數的作用域最小化,最有力的方法就是在第一次使用它的地方宣告 幾乎每個區域性變數的宣告都應該保護一個初始化表示式例外,try-catch,因為初始化會被拋異常,那麼在try外宣告,在內部初始化 使方法小而集中,使得一個操作相關

Java編程思想讀書筆記_8

讀書筆記 div spl class alt oid ava 函數 opened 覆蓋私有方法 1 class Father { 2 private void f() { System.out.println("Father::f()"); } 3

HTTP圖解讀書筆記 HTTP首部為cookie服務的首部欄位和其它首部欄位

為cookie服務的首部欄位 Set-Cookie  當服務端開始準備管理客戶端的狀態時,會事先告知各種資訊。 Set-Cookie欄位屬性: expires           指定瀏覽器可傳送c

HTTP圖解讀書筆記 HTTP首部實體首部欄位

實體首部欄位是包含在請求報文和響應報文中的實體部分所使用的首部,用於補充內容的更新時間等與實體相關的資訊。 Allow 通知客戶端能夠支援Request-URI指定資源的所有HTTP方法。 當伺服器端收到不支援的HTTP方法時會返回405 Method Not Allowed。還會把支援

HTTP圖解讀書筆記 HTTP首部響應首部欄位

Accept-Ranges 告知客戶端伺服器是否可以處理範圍請求(可以:bytes,不可以:none) Age 告訴客戶端,源伺服器在多久前建立了響應,單位為秒 ETag 首部欄位 ETag 能告知客戶端實體標識。它是一種可將資源以字串形式做唯一性標識的方式。伺服器會為每份資源分

HTTP圖解讀書筆記 HTTP首部請求首部欄位

請求首部欄位 Accept 用於通知伺服器和代理,能夠處理的媒體型別和優先順序 eg:Accept: text/html,application/xhtml+xml,application/xml;q=0. 幾種媒體型別的例子: 文字檔案   

HTTP圖解讀書筆記 HTTP首部通用首部欄位

HTTP/1.1通用首部欄位 Cache-Chtrol操作快取的工作機制 快取請求指令           快取響應指令           publi

HTTP圖解讀書筆記 HTTP首部首部欄位

HTTP請求報文 HTTP響應報文 一、HTTP首部欄位 使用首部欄位是為了給瀏覽器和伺服器提供報文主體大小、所使用的語言、認證資訊等內容。 四種HTTP首部欄位型別: 通用首部欄位        請求報文和響應

HTTP圖解讀書筆記 與HTTP協作的web伺服器

一、單臺虛擬主機提供多個域名  HTTP/1.1 規範允許一臺 HTTP 伺服器搭建多個 Web 站點。這是因為利用了虛擬主機(Virtual Host,又稱虛擬伺服器)的功 能。 即使物理層面只有一臺伺服器,但只要使用虛擬主機的功能,則可以假想已具有多臺伺服器。 如果一臺伺服

HTTP圖解讀書筆記 返回結果的HTTP狀態碼

一、狀態碼 5種狀態碼: 具有代表性的14個狀態碼: 2XX 請求被正常處理 200 ok        表示客戶端發來的請求在服務端被正常處理了 204 no Content &n

HTTP圖解讀書筆記 HTTP報文內的HTTP資訊

目的:瞭解HTTP通訊響應和請求時怎麼運作的 一、HTTP報文 HTTP報文:用於協議互動的資訊被稱為HTTP報文 HTTP報文大致可分為報文首部和報文主體(應被髮送的資料),兩者由最初出現的空行來劃分,通常,並不一定要報文主體 二、請求報文和響應報文的結構  請

Effective Java 讀書筆記:建立和銷燬物件

1 構造器 => 靜態工廠方法 (1)優勢 靜態工廠方法有名字 靜態工廠方法不必在每次被呼叫時都產生一個新的物件 靜態工廠方法能返回原返回型別的任意子型別的物件 靜態工廠方法根據呼叫時傳入的不同引數而返回不同類的物件 靜態工廠方法返回物件的類不需要存在(SPI架構) (2

不測的祕密:精準測試之路----讀書筆記

三、精準化測試第一式:差異化 關注實現,明確測試物件,指哪打哪 尋找測試物件差異,尋找最小精準測試物件    測試物件:指測試的源程式、目標程式、資料和相關文件   精準測試物件:迭代之間的差異部分(需求差異、技術實現上的差異)、差異部分影響的其他功能

不測的祕密:精準測試之路----讀書筆記

四、精準化測試第二式:技術治理 1、技術耦合(由強到弱) 內容耦合 *  一個模組直接訪問另一個模組的內部資料 *  一個模組不通過正常入口轉到另一模組內部 *  兩個模組有一部分程式程式碼重疊(只可能出現在組合語言中) * &nbs

不測的祕密:精準測試之路----讀書筆記

五、精準化測試第三式:度量和分析閉環 1、如何衡量測試精準度:初步想法用程式碼覆蓋率來體現 程式碼覆蓋率:用來衡量程式碼被覆蓋程度的一種度量方式 語句覆蓋:度量被測程式碼中每個可執行語句是否執行到了 判定覆蓋:度量程式中每一個判定的分支(分支真、假)是否都被執行到了

Effective Java8 通用程式設計

本章主要涉及Java語言的具體細節,討論了局部變數的處理,控制結構,類庫的用法,各種資料型別的用法,以及兩種不是語言本身提供的機制(reflection和native method,虛擬機器JVM提供支援的)的用法。 1.將區域性變數的作用域最小化 【Item

Effective Java讀書筆記

通過私有構造器槍花不可例項化的能力 // Noninstantiable utility class public class UtilityClass { // Suppress default constructor for nonintant