40、謹慎設計方法的簽名
1、謹慎地選擇方法的名稱。
2、不要過於追求提供便利的方法,每個方法應該盡其所能。
3、避免過長的參數列表
1.把方法分解成多個
2.創建輔助類,用來保存參數的分組
3.Builder模式
41、慎用重載
import java.math.BigInteger; import java.util.*; public class CollectionClassifier { public static String classify(Set<?> s){ return "set"; } public static String classify(List<?> list){ return "list"; } public static String classify(Collection<?> collection){ return "Unknow collection"; } public static void main(String[] args) { Collection<?>[] collections = { new HashSet<String>(), new ArrayList<BigInteger>(), new HashMap<String,String>().values() }; for (Collection collection:collections) { System.out.println(classify(collection)); } } }
output:
Unknow collection
Unknow collection
Unknow collection
classify方法被重載了,而要調用哪個重載方法是在編譯時決定的。
對於重載方法的選擇是靜態的,而對於被覆蓋方法的選擇是動態的。
42、慎用可變參數
43、返回零長度的數組或者集合,而不是NULL
44、爲所有導出的API元素編寫文檔註釋
45、將局部變量的作用於最小化
可以增強代碼的可讀性和可維護性,降低代碼出錯的可能性。
46、for-each優先於for循環
使用工具類Arrays.asList()把數組轉換成集合時,不能使用其修改集合相關的方法,它的add/remove/clear方法會拋出UnsupportOperationException異常 說明:asList的返回對象是一個Arrays內部類,並沒有實現集合的修改方法。Arrays.asList體現的是適配器模式,只是轉換接口,後臺的數據仍是數組。
47、瞭解和使用類庫
48、如果需要精確的答案,請避免使用float,double。
49、基本類型優於裝箱基本類型
基本類型:int,double,引用類型(String,List)。
每個基本類型都有一個對應的引用類型,乘坐裝箱基本類型,如Integer,Double,Boolean。
區別:
一:基本類型只有值,而裝箱基本類型則具有與它們的值不同的同一性。
二:基本類型只有功能完備的值,二每個裝箱基本類型除了它對應基本類型的所有功能值之外,還有個非功能值:null。
三:基本類型更節省時間和空間。、
50、如果其他類型更合適,則儘量避免使用字符串。
51、當心字符串連接的性能
52、通過接口引用對象
如果有合適的接口類型存在,那麼對於參數,返回值,變量和域來說,就都應該使用接口類型進行聲明。
域:所謂的域,翻譯成英文就是field, 也就是我們常說的字段,或者說是屬性。 比如類的字段(屬性),局部的,全局的。所謂域,其實是“field”的翻譯
實例域:
比如:
class A{
public static void main(String[] args)
{
A a = new A();
//a是個實例,那麼這個實例的作用域就是“實例域"
}
}
然後實例域,就是 實例("object" )的"field"。包括實例域和靜態域,靜態域又叫類域。
只有當你利用構造器創建某個對象的時候,才真正需要引用這個對象的類。
如果你養成了用接口作爲類型的習慣,你的程序將會更加靈活。當你決定更換實現時,所要做的就只是改變構造器中的類的名稱。
53、接口優先於反射機制。
核心反射機制(java.lang.reflect),提供了“通過程序來訪問關於已裝載的類的信息”的能力。
54、謹慎的使用本地方法
55、謹慎地進行優化
56、遵守普遍接受的命名慣例