前言
從本章開始,逐漸記錄筆者在閱讀「Thinking in Java」時,內容的積累、代碼的實踐和個人編程的心得,重要的是個人的成長。正式工作將近一年的我,有必要重新溫故一下Java
的核心基礎,鞏固自身的硬實力,從根本感受Java
語言的魅力,而不是侷限於敲代碼,完成產品需求。更重要的是領悟每種語言的特色,融入其中,提升自己,感受學習帶來的快樂!足以!
正文
1. Java 五個基本特性
- 萬物皆爲對象
- 程序是對象的集合,他們通過發送消息來告知彼此所要做的。
- 每個對象都有自己的由其他對象所構成的存儲。
- 每個對象擁有其類型。
- 某一特定類型所有對象都已接收同樣的消息。
2. 每個對象都有一個接口
3. 每個對象都提供服務
將對象看做是服務提供者有一個好處,它有助於提高對象的內聚性。這不僅在設計過程中非常有用,而且當其他人試圖理解你的代碼活重用某個對象時候, 如果他們看出對象多能提供的服務的價值,它會調整對象以適應其設計的過程變得簡單很多。
4. 被隱藏的具體實現
類創建者的目標是構建類,這種類只向客戶端程序員暴露必需的部分,而隱藏其他部分。這以爲着類創建者可以任意修改被隱藏的部分,而不用擔心對其他任何人造成影響,被隱藏的部分通常對象內部脆弱的部分,它們很容易被粗心或者不知內情的客戶端程序員所毀壞,因此將實現隱藏起來可以減少程序的 bug。
5. Java 用三個關鍵字在類的內部設定邊界
public | private | protected |
---|---|---|
任何人都可以用 | 除類型創建者和內部方法,任何人不能訪問 | 僅繼承的成員可以訪問 |
6. 複用具體實現
代碼複用是面向對象程序設計語言所提供的最了不起的優點之一。在建立新類時,應該優先考慮組合,因爲它更加簡單靈活,如果採用這種方式,設計會變得更加清晰,一旦有了一些經驗之後,便能夠看出必須使用繼承的場合了。
7. 繼承
void doSomeThing(Shape shape) {
shape.draw();
// ....
shape.setColor();
}
Circle circle = new Circle();
doSomeThing(circle);
當Circle
被傳入到預期接收的Shape
,向上轉型,這就是泛型的使用,當調用基類的方法時,會主動定位到指定的具體對象,調用該對象的具體實現方法。
8. 容器
需要對容器有所選擇,主要有兩個原因:1. 不同容器提供了不同類型的接口和外部行爲。堆棧相比於隊列就具備不同的接口和行爲。2. 不同的容器對某些操作具有不同的效率,最好的例子便是 ArrayList
和 LinkedList
。
9. 對象的創建和生命週期
在使用對象時,最關鍵的問題之一便是它們的生成和銷燬方式,每個對象爲了生存都需要資源,尤其是內存,當我們不再需要一個對象時候,它必須被清理掉,使其佔有的資源可以被釋放和重用。
10. 異常處理:處理錯誤
異常處理將錯誤處理直接置於編程語言中,有時候甚至置於操作系統中。異常處理不是面向對象的特徵–儘管在面嚮對象語言中異常常被表示成一個對象,異常處理在面嚮對象語言出現之前就已經存在了。
11. 併發編程
頻發的操作不可能允許我們等上一個操作結束才能進行下一個操作,這個時候就需要併發執行,很早計算機就已經有了這個概念,就是在同一個時刻處理多個任務的思想。
12. Java 與 Internet
總結
OOP 和 Java 也許並不適合所有人,重要的是正確評估自己的需求,並決定 Java 是否能夠最好的滿足這些需求,還是使用其他的編程系統纔是更好的選擇,如果知道自己的需求在可預見的未來會變得非常特殊,並且 Java 可能不滿足你的具體限制,那麼就應該考慮其他的選擇了。