4.1 面向?qū)ο蟪绦蛟O(shè)計概述
4.1.1 類
- 類(class)是構(gòu)造對象的模板或藍圖
- 封裝不過是將數(shù)據(jù)和行為組合在一個包中
4.1.2 對象
4.1.3 識別類
- 名詞與動詞
4.1.4 類之間的關(guān)系
- 依賴:uses-a
- 聚合:has-a
- 繼承:is-a
4.2 使用預(yù)定義類
4.2.1 對象與對象變量
- 局部變量不會自動地初始化為null,而必須通過調(diào)用new或?qū)⑺鼈冊O(shè)置為null進行初始化。
4.2.2 Java類庫中的LocalDate類
- Date類:用來表示時間點
- LocalDate:用來表示大家熟悉的日歷表示法
4.2.3 更改器方法與訪問器方法
4.3 用戶自定義類
4.3.1 Employee類
4.3.2 多個源文件的使用
4.3.3 剖析Employee類
- 構(gòu)造器總是伴隨著new操作符的執(zhí)行被調(diào)用
4.3.5 隱式參數(shù)和顯式參數(shù)
- 方法前面是隱式參數(shù),方法后面是顯式參數(shù)
- this代表隱式參數(shù),即調(diào)用方法的對象
4.3.6封裝的優(yōu)點
- 更改器方法可以執(zhí)行錯誤檢查,然而直接對域進行賦值將不會進行這些處理。
- 不要編寫返回引用可變對象的訪問器方法
- 如果需要返回一個可變對象的引用,應(yīng)該首先對它進行克隆clone
4.3.7 基于類的訪問權(quán)限
4.3.8 私有方法
4.3.9 final實例域
- final表示只有一次建立引用的機會,但引用的對象是可以更改的
4.4 靜態(tài)域與靜態(tài)方法
4.4.1 靜態(tài)域
- 每一個對象都擁有實例域的一份拷貝
4.4.2 靜態(tài)常量
4.4.3 靜態(tài)方法
- 類直接調(diào)用,沒有隱式參數(shù)
- 對象也可以調(diào)用靜態(tài)方法,不過,不建議這么使用
4.4.4 工廠方法
- 本質(zhì)上就是對new方法的封裝
4.4.5 main方法
4.5 方法參數(shù)
- Java程序設(shè)計語言總是采用按值調(diào)用,方法得到的是參數(shù)值的拷貝,方法不能改變參數(shù)變量的內(nèi)容
- Java是直接訪問,不存在間接訪問
- 一個方法可以改變一個對象參數(shù)的狀態(tài)
- 一個方法不能讓對象參數(shù)引用一個新的對象
4.6 對象構(gòu)造
4.6.1 重載
- 相同的名字,不同的參數(shù)
- 返回類型不是方法簽名的一部分
4.6.2 默認域初始化
4.6.3 無參數(shù)的構(gòu)造器
- 域會自己設(shè)置默認值,但局部變量,必須手動賦初始值
4.6.4 顯示域初始化
- 在類定義中,直接將一個值賦給任何域。
- 在聲明中賦值
- 初始化塊
4.6.5 參數(shù)名
- this.name = name
4.6.6 調(diào)用另一個構(gòu)造器
- this
4.6.7 初始化塊
- 對象初始化塊在構(gòu)造器之前執(zhí)行
- 調(diào)用構(gòu)造器的具體處理步驟:
1 所有數(shù)據(jù)域初始化為默認值
2 按照在類聲明中出現(xiàn)的次序,依次執(zhí)行所有域初始化語句和初始化塊
3 如果用this調(diào)用其他的構(gòu)造器,則先調(diào)用另外的構(gòu)造器
4 最后調(diào)用本構(gòu)造器的剩余代碼 - 對類的靜態(tài)域進行初始化,可以使用靜態(tài)代碼塊
4.6.8 對象析構(gòu)與finalize方法
4.7 包
4.7.1 類的導(dǎo)入
4.7.2 靜態(tài)導(dǎo)入
- import語句不僅可以導(dǎo)入類,還增加了導(dǎo)入靜態(tài)方法和靜態(tài)域的功能
4.7.3 將類放入包中
- 如果包與目錄不匹配,虛擬機就找不到類
4.7.4 包作用域
4.8 類路徑
- classpath:一般就設(shè)置為. 代表當(dāng)前目錄
4.9 文檔注釋
- javadoc
4.9.1 注釋的插入
4.9.2 類注釋
4.9.3 方法注釋
4.9.4 域注釋
- 只需要對公有域建立文檔,通常是靜態(tài)常量
4.9.5 通用注釋
4.9.6 包與概述注釋
4.9.7 注釋的抽取
4.10 類設(shè)計技巧
- 優(yōu)先使用不可變對象,這樣可以避免多線程的并發(fā)修改異常。