標籤:初始 常見 nbsp 靜態方法 工作 raise 常量 自身 靜態
- 類
- 執行個體域:對象中的資料—>執行個體化後的類中中資料
- Object是所有類的超類
- 對象
- 作為類的執行個體,每個對象的標識永遠不同,狀態也常常存在差異
- 類之間的關係
- 依賴 uses-a —-一個類的方法操縱另一個類的對象
- 彙總 has-a ——類A的對象包含類b的對象
- 繼承 is-a —-從父類繼承,並且加入自身的方法。
- 使用預定義類
- 一個物件變數並沒有實際包含一個對象,而是僅僅引用一個對象
- 使用者自訂類
- 執行個體域:類的定義中例如int i, double j之類的變數,或者叫執行個體域
- 構造器
- 構造器只能伴隨著new一起使用,而不能對一個已經存在的對象調用構造器。
- 構造器是沒有傳回值的
- 每個類中可以有一個以上的構造器
- 不能在構造器裡定義與執行個體域重名的局部變數 常見錯誤
- 隱式參數與顯式參數
- 例如public void raisesalary(double salary),隱式參數為調用該方法的Employee類,而顯式參數則是salary.一般用this來代表隱式參數,this.salary = salary
- 封裝的優點
- 組成部分:私人資料域+公有域訪問器方法+公有域更改器方法
- 可以改變內部實現,除了該類的方法外,不會影響其他代碼
- 更改器可以執行錯誤檢查,從而避免薪資為負數的情況
- 不要編寫返回可變對象的訪問器方法原因: 如果直接返回一個可變資料類型,可能出現外界的變數與對象執行個體域指向同一個位置,那麼就使得可以在外部進行資料修改,從而導致錯誤
- 如果要返回一個可變資料類型應該怎麼辦呢?方法: 返回一個可變資料類型的拷貝。例如return (Date) hireday.clone().
- 基於類的存取權限
- 一個方法可以訪問所調用對象的私人資料
- 一個方法可以訪問所屬類的所有對象的私人資料。!!!!
- 私人方法
- 方法如果是私人的,那麼就不必考慮外部的其他類操作調用的情況
- final執行個體域
- 執行個體域定義為final後,構建對象時必須初始化這樣的域,必須確保在每個構造器執行之後,這個域的值被設定,且後續不能對其進行修改。
- 一般應用於基本類型域或者是不可變類型域。如果對可變類的域使用,那麼僅僅表示儲存在變數中的對象引用不會指向其他的對象。
突然發現static final 定義在main函數外面!!!!而且String 的equals 也是比較其內容而不是存放的位置。
- 靜態域與靜態方法
- 靜態域
- 每個類中只有一個,即使沒有對象,也依舊存在,它屬於類。調用方法如下: Employee.nextId(nextId即為靜態域)
- 靜態常量
- 直接屬於類,例如PI,調用方法:Math.Pi
- 每個類對象都可以對公有域進行修改OK
- 靜態方法
- 不能向對象實施操作的方法,及 沒有隱式的參數
- 靜態方法只能訪問靜態域,即為該類自身所有,而與對象無關的域。
- 使用條件
- 一個方法不需要訪問狀態物件
-
- 一個方法只需要訪問類的靜態域即可
- Factory 方法(factory method)??
- Factory 方法(Factory Method)模式的意義是定義一個建立產品對象的工廠介面,將實際建立工作延遲到子類當中。核心工廠類不再負責產品的建立,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得Factory 方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。
- main 方法-->靜態方法
- 方法參數
- 按值調用:方法接受的是調用者提供的值
- 按引用調用: 方法接受的是調用者提供的變數地址
- Java是按值調用的,無法該變參數值的大小(這和C不是一樣的嗎??),但是和C裡的指標一樣,Java是可以改變引用的值的大小的。(拷貝對象的引用,得到的依舊是對象的引用)
- 一個方法是不能讓對象參數指向一個新的對象的!!!!!!!!!
- 物件建構
- 重載:多個方法名字相同,但是參數不同,產生重載
- tips: 方法簽名包括方法名以及參數類型,這使得不存在同名同參傳回值不同的方法
- 預設域初始化:
- 自動賦值出現在沒有顯示賦值的情況下,數值=0,布爾值=false,對象引用=null
- 無參構造器:
- 無參構造器是預設提供的若且唯若沒有其他構造器,但是如果有了一個帶參數的構造器但沒有自己寫一個無參構造器,再使用無參構造器會發生報錯。
- 顯式域初始化:
簡單的java類與對象的總結