# 整理周筆記8/31 ~ 9/4 編譯時期 java --> java.compiler ---> class檔案 執行時期 class檔案(讓各大程式都能讀取的) ---> JVM(JAVA虛擬機,來執行) 執行時期字串跟編譯時期的字串 會是不同的記憶體位置 編譯時期的字串 若是同樣內容 會被指到同個記憶體位置 (都會被放在字串池,例如 你輸入100個1 都會被放在同個位置 如果編譯時期串起來 將字串"1"+"2"; 跟字串"12" 記憶體位置也會相同 ) 執行時期 即便內容相同,但是不會是同個記憶體位置 (因為他不知道你執行時期 輸入什麼 所以會新創記憶體位置) 要比較內容 "值" 是否相同 要用.equal(); .方法() 有小括號是方法 沒有就不是 arr.length 是變數 查一下,正則表示式 多載 會考 何謂 屬名 判別時參考三個事情 函式名稱 參數各數 及參數的順序 白話就是 小括號裡面()來決定 public static void abc(){ // 就是小括號這個 } length() split() substring() contains() replace() equals() compareTo() 從類別角度去看 一個類別(Class 裡面只有 方法跟屬性) 屬性 即是 基本資料型態 方法是 後面有帶小括號的 ```java= public void abc(){ } ``` 其他都不會寫在class裡面 一個類別裡面的 函式 叫方法 一個類別裡面 屬性 叫狀態 class裡面有 建構子 也是一個方法(函式) 一定跟類別同名 大小寫一樣 假設你不寫 建構子 他會自己預設一個 public class名字(){ } ## 物件導向8/26 使用觀念方式 從外部主程式只操控 圖書館 所以要一個實體物件 new圖書館後產生 思考方向 以下類別 圖書館 書櫃 書 書的日期 * 修飾詞 | | private | default | protected | public | | -------- | -------- | -------- |-------- |-------- | | 同一個類 | O | O | O | O | | 同一個package | | O |O | O | | 不同package的子類 | | | O | O | | 不同package的非子類 | | | | O | 1. 函式 = 拉出重複行為 2. 類別 = 拉出重複行為 且 伴隨重複的方法 3. 繼承 = * 繼承 - (java 只有 ***單一繼承***) * 子類別 * 將父類別所公開(public)的屬性及方法(複製給子類別),直接可調用 * 建構子 * 子類別 包含 父類別的建構子 及 子類別的建構子,父類別會先被執行 無參數建構子 * 若 父類別都需要參數的建構子 則子類別 建構子 需要呼叫 super(1); 以進行父類別 帶參數建構子的呼叫。 * java 所有的類別 都繼承 java.lang.Object * override(覆寫) * 子類別建立方法 但與父類別同名 且參數相同,則在子類別呼叫會使用子類別方法,稱為override * @Override 符號 作為標示 * 多形 * 父類別 = 子類別; ,可以由子類別取出完整的父類別,但可能遺失子類別專屬的屬性與方法 * 取得父類別後,可存取父類別的private數及方法 * 父類別 = 不同子類別 => 可以變成不同的實體,在執行時期 才決定型態 * 搭配override 則可切換子類別的 ***方法*** 內容 * 子類別 = 父類別; 一般無法使用 後續有強制轉型方式。 * toString() 任何類別 都有這個方法 作為列印時 使用 ```java= Square s = new Square(3); System.out.println(s);//使用object的toString方法 內部呼叫 System.out.println(s.toString()); ``` 可以使用override更改toString()方法,作為列印物件時的特別方式。 override注意事項 子類別繼承父類別,封裝等級 及 回傳屬性部分, 回傳屬性 只能向下 如: Animal 類別 可使用為 Animal(原本的 父類別) or Cat /Dog(Animal的子類別)等 封裝等級,