- 對象存放的位置是堆
- 可以把變量想象成杯子,主數(shù)據(jù)類型的變量直接以字節(jié)的形式存放其中,引用變量是防止遙控器(指向?qū)嶋H存放地址)
- 數(shù)組也是對象
- java通過拷貝的方式進(jìn)行值傳遞,就是將杯子復(fù)制一份。所以如果入?yún)橹鲾?shù)據(jù)類型,則變量在方法結(jié)束之后不發(fā)生改變;如果入?yún)橐米兞浚玫膶ο髸?huì)改變(復(fù)制的是引用值,指向同一個(gè)對象)
- 實(shí)例變量有默認(rèn)值,局部變量沒有,因此局部變量必須初始化
- List & ArrayList
List:創(chuàng)建時(shí)要確定大??;通過指定位置的方式存入對象
ArrayList:創(chuàng)建時(shí)不用確定大??;通過add()存放對象 - ArrayList只能存放Object,因此輸入的數(shù)據(jù)會(huì)被包裝成Object,當(dāng)從ArrayList取出時(shí),需要強(qiáng)制轉(zhuǎn)換,才能回到原本類型。
- 對于繼承,子類的方法需要不低于父類方法的開放權(quán)限,如父類是protected,子類為protected,public,不能為private。
- 子類可以繼承和實(shí)現(xiàn)接口
class C extends A implements B - 構(gòu)造函數(shù)沒有返回類型,構(gòu)造函數(shù)可以重載(一個(gè)類可以有多個(gè)構(gòu)造函數(shù)應(yīng)對應(yīng)不同入?yún)⒘斜恚瑯?gòu)造函數(shù)的開放權(quán)限可以是公有或者私有。
- super()是調(diào)用父類構(gòu)造函數(shù)的唯一方法(默認(rèn)存在),必須位于函數(shù)方法塊內(nèi)的第一行,因此構(gòu)造函數(shù)在執(zhí)行時(shí)的首要任務(wù)時(shí)執(zhí)行父類的構(gòu)造函數(shù)()
- this()是只能存在于構(gòu)造函數(shù)中,是從某個(gè)構(gòu)造函數(shù)調(diào)用同類的另一個(gè)構(gòu)造函數(shù),必須位于第一行。所以每個(gè)構(gòu)造函數(shù)只能選擇this()或者super()中的一種
- 靜態(tài)方法 & 非靜態(tài)方法
靜態(tài)方法:不涉及到實(shí)例變量;用類的名詞進(jìn)行調(diào)用
非靜態(tài)方法:涉及實(shí)例變量;用引用對象的名詞進(jìn)行調(diào)用 - 靜態(tài)變量(用state標(biāo)記)存在于類中,被類的所有實(shí)例共享,在任何靜態(tài)方法執(zhí)行或者類實(shí)例化之前完成初始化。
- 如果類只有靜態(tài)方法,將構(gòu)造函數(shù)標(biāo)為private從而避免被初始化。
- 對于可能出現(xiàn)異常的方法,必須進(jìn)行處理,否則程序終止。處理的方法有:
- 在方法聲明中拋出(throw)異常,拋出的是一個(gè)異常對象
- 在方法塊中利用try...cathc對異常進(jìn)行處理,try中包含可能出現(xiàn)異常的程序
- 編譯器會(huì)對首個(gè)符合條件的異常塊(catch塊)進(jìn)行處理,因此catch塊的順序遵循從下到上的原則,即先子類再父類異常。
- 內(nèi)部類可以使用外部類的所有方法和變量,包括私有的屬性
- 序列化(serializable)是全有或者全無的(一旦某個(gè)環(huán)節(jié)序列化失敗則全部失效),可以通過
transient跳過某些無法序列化的變量 - 將對象寫入文件
FileOutputStream filestream = new FileOutputStream("filename"); //寫入文件
ObjectOutputStream os = new ObjectOutputStream(filestream); //對象序列化
os.writeObject(Object one);
os.close()

image.png
- 從文件中讀取對象
FileInputStream filestream = new FileInputStream("filename"); //讀取文件
ObjectInputStream os = new ObjectInputStream(filestream); //對象反序列化
os.readObject();
os.close()
- 父類實(shí)現(xiàn)序列化,則子類也自動(dòng)序列化;父類無法序列化不代表子類無法序列化。
- 靜態(tài)變量不會(huì)被序列化
- 啟動(dòng)新線程
Runnable threadJob = new Runnable();
Thread mythread = new Thread(threadJob);
mythread.start();
- Runnable中只有一個(gè)run()函數(shù),用于說明線程的具體工作。
- 用指定類型的ArrayList作為函數(shù)入?yún)r(shí),無法傳入子類的ArrayList集合(這是與單個(gè)對象作為入?yún)⒌膮^(qū)別),如定義入?yún)锳rrayList<Animal>,卻傳入ArrayList<Dogs>,會(huì)在運(yùn)行期間報(bào)錯(cuò)。處理方法有
- 泛型方法
public < T extends Animals> void fun(ArrayList<T> list) - 萬用字符
public void fun(ArrayList<? extends Animal> list)
泛型方法通過T extends Animals指明可以輸入Animal的子類,萬用字符則利用? extends Animal規(guī)定不讓任何對象加入集合中,從而使得ArrayList<Dogs>也能作為入?yún)ⅰ?/li>