1).如果你曾經學習過第二種語言,并嘗試在課堂之外使用這種語言,那么你該知道有三件事情是必須掌握的:
1. 這門語言的結構如何(語法)
2. 如何命名你想談論的事物(詞匯)
3. 如何用習慣和高效的方式來表達事物(用法)
在課堂山只是涉及到前面兩點,而當你努力使對方明白你的意思的時候,你常常發現當地人對你的表述忍俊不禁!
對于程序設計語言,也是如此。你需要理解語言的核心:它是面向算法的,還是面向函數的,或者是面向對象的? 你需要知道詞匯表:標準庫提供了那些數據結構、操作和功能設施? 你還需要熟悉如何用習慣和高效的方式來構建代碼。關于程序設計語言的書籍通常只是涉及到前面亮點,或者只是蜻蜓點水般地介紹一下用法。也許原因在于,前面亮點更加容易編寫。語法和詞匯是語言本身固有的特性,但是用法則反映了使用這門語言的群體的特性。
-- Guy Steele ,Sun研究院的杰出工程師,程序涉及語言領域的世界級 專家,Scheme語言的設計者之一.
2)記住:多使用Map entrySet()和valueSet()方法而不是使用keySet()方法.
3)要想區別一個設計良好的模塊與一個設計不好的模塊,最重要的因素是,這個模塊對于外部的其他模塊而言,是否隱藏了內部的數據和其他的實現細節。一個設計良好的模塊會隱藏所有的實現細節,把它的API與實現清晰地隔離開來。
然后,模塊之間只通過它們的API進行通信,一個模塊不需要知道其他模塊的內部工作情況。這個概念被稱為信息隱藏 或 封裝,是軟件設計的基本原則之一.
4) 靜態成員類 非靜態成員類 匿名類 局部類 (后三種稱為內部類)
優先考慮靜態成員類,靜態成員類的一種通常用法是作為公有的輔助類,僅當與它的外部類一起使用時才有意義;
非靜態成員類的每一個實例都隱含著與外圍類的一個外圍實例緊密關聯在一起,在非靜態成員類的實例方法內部,調用外圍實例上的方法是有可能的,或者使用經過修飾的this也可以得到一個外圍實例的引用;
如果一個嵌套類的實例可以在它的外圍類的實例之外獨立存在,那么這個嵌套類不可能是一個非靜態成員類:在沒有外圍實例的情況下要想創建非靜態成員類的實例是不可能的;
當匪靜態成員類的實例被創建的時候,它和外圍實例之間的關聯也隨之被建立起來,而且,這種關系以后不能被修改,參見Map.Entry;
如果你聲明的成員類不要求訪問外圍實例,那么請記住把static修飾符放到成員類的聲明中,如果你省略了static,則每個實例都將包含一個額外的指向外圍對象的引用,維護這份引用要消耗時間和空間,但有沒有相應的好處;
私有靜態成員類的一種通常用法是用來代表外圍類對象的組件,考慮一個Map實例,它吧鍵(key) 和 值(value)關聯起來,Map實例內部通常有一個Entry對象對應于Map中的每一個鍵-值對;
## 匿名類
匿名類的一個通常用法是創建一個函數對象(functional object):
Arrays.sort(args, new Comparator(){
public int compare(Object o1,Object o2)..
}
匿名類的另一個常見用法是創建一個過程對象(process object),比如Runnable ,Thread ,TimerTask實例
第三個用法是在一個靜態工廠方法的內部
第四種用法是在復雜的類型安全枚舉類型中,用于公有的靜態final域的初始化器中
四種嵌套類使用總結:
如果一個嵌套類需要在單個方法之外仍然是可見的,或者它太長了,不適合放在一個方法id內部,那么應該使用成員類
如果成員類的每一個實例都需要一個指向其它外圍實例的引用,則把成員類做成非靜態的,否則就做成靜態的
假設一個嵌套類屬于一個方法的內部,如果你只需要在一個地方創建它的實例,并且已經有了一個預先存在的類型可以說明這個類的特征,則把它做成匿名類;否則就做成局部類。
Tip: 對于重載方法(overloaded method)的選擇是靜態的,而對于改寫的方法(overridden method)的選擇是動態的。對于被改寫的方法,選擇正確的版本是在運行時刻進行的,選擇的依據是被調用方法所在對象的運行時類型。
Tip: 因為改寫機制是規范,而重載機制是例外,所以,改寫機制滿足了人們對于方法調用行為的期望。一個安全而保守的策略是:永遠不要導出兩個具有相同參數數目的重載方法。
## 常用命名規則
run call enable/disable
返回不同類型的獨立對象的方法:toType: toString toArray
返回一個試圖,試圖的類型不同于接收對象的類型的方法:asType :asList ,asMap
返回一個與被調用對象同值的原語類型的方法,一般命名為:typeValue :intValue booleanValue
靜態工廠的常用名字為valueOf 或者 getInstance
Tip 最常用的可重用異常:
IllegalArgumentException 參數的值不合適
IllegalStateException 對于這個方法調用而言,對象狀態不合適
NullPointerException 在Null被禁止的情況下參數為null
IndexOutOfBoundException 下標越界
ConcurrentModificationException 在禁止并發修改的情況下,對象檢測到并發修改
UnsupportedOperationException 對象不支持客戶請求的方法
總結一條規則:作為方法規范的一部分,任何一個異常都不應該改變對象調用該方法之前的狀態。如果這條規則被違反,則API文檔應該清楚地之指明對象將會處于什么樣的狀態。
- 職業生涯
- 如何提升你的能力?給年輕程序員的幾條建議
- 那些年,那些事
- 阿里巴巴離職DBA 35歲總結的職業生涯
- 人生的四種選擇
- 程序人生的四個象限和兩條主線
- 幾縷代碼與閑思
- 張小龍-學習筆記
- Web前端
- 移動Web手冊
- 精通CSS: 高級Web標準解決方案
- 悟透JavaScript
- 架構設計
- 大型網站技術架構
- 周愛民-大道至簡
- RESTful Web Services Cookbook - 讀書筆記
- 大話設計模式
- Unix編程藝術
- 把程序員修煉之道讀薄
- 學習能力
- 奇特的一生:讀書筆記
- zhh-看源碼那些事
- 一個創業者怎么看待讀書和寫作
- 程序員修煉之道
- 2015/1/5 頭腦風暴
- 書單計劃
- 2014年我讀過的那些書
- 我的后端開發書架2015
- 別人的書單
- 讀書筆記
- 浪潮之巔
- 達內時期自己筆記整理
- Effective Java
- 打造facebook: 讀書筆記
- 面試整理
- 阿里面試的一點感受
- 騰訊的三輪面試
- 三十之惑–面霸
- 前端面試問題匯總
- 八爪網絡面試總結
- 2015面試總結總結
- 找工作流程梳理
- 最全前端面試問題及答案總結
- 前端開發面試題收集
- 百度web前端--2015一面
- 百度web前端--2015二面