? 異常
○ Throwable類是Java中Error(錯誤)和Exception(異常)的父類
○ Error類及其子類在開發(fā)中一般不用處理
○ Exception類是Java中所有異常的父類
○ Exception類又分為運行時異常(RuntimeException 非強制捕獲型異常)和非運行
異常(強制捕獲異常)

○ 當(dāng)應(yīng)用程序在運行過程中產(chǎn)生了異常,則程序就終止運行
○ try塊中存放的是可能產(chǎn)生異常的代碼,catch中存放出現(xiàn)異常后執(zhí)行的代碼,finally中存放的是無論是否出現(xiàn)異常都執(zhí)行的代碼
○ try可以有多個catch子句,但是最多只能有一個finally子句
○ 通過throw關(guān)鍵字可以手動拋出一個異常,在方法的聲明部位通過throws關(guān)鍵字告訴調(diào)用者該方法會拋出異常

○ 通過類繼承自現(xiàn)有的異??梢宰鲎远x異常
○ 如果自定義異常是運行時異常則需要繼承自RuntimeException或其子類,如果是非運行時異常則需要繼承自Exception類或其子類(不含RuntimeException)

○ throws關(guān)鍵字可以定義拋出多個異常,之間使用逗號分割

○ 在方法中拋出一個非運行時異常,則必須在方法的簽名處使用throws關(guān)鍵字來標(biāo)記;調(diào)用者使用try…catch將代碼包裹

? File
??? ○ 在Java中File類即表示文件又表示文件夾
??? ○ File類的各種API的使用
? 流
○ 流的分類
??? ? 字節(jié)流(二進(jìn)制文件)
??? ? 字符流(文本文件)
○ InputStream是所有字節(jié)輸入流的父類
○ OutputStream是所有字節(jié)輸出流的父類
○ FileInputStream類是InputStream類的子類,用于從文件中獲取字節(jié)輸入流
○ FileOutputStream類是OutputStream類的子類,用于將字節(jié)輸出到文件中
○ BufferedInputStream和BufferedOutputStream分別是InputStream和
OutputStream類的子類,它們使用裝飾者模式對輸入流和輸出流進(jìn)行裝飾,使得輸入流和輸出流具有緩沖功能,從而提高讀寫速度
○ DataInputStream和DataOutputStream分別是InputStream和OutputStream類的子類,使用裝飾者模式對輸入流和輸出流進(jìn)行裝飾,使得輸入流和輸出流可以將Java中中的基本數(shù)據(jù)類型和字符串輸出到流中或從流中讀取
○ 在Java中將對象寫入流的過程稱為序列化;將流轉(zhuǎn)換為對象的過程稱為反序列化
○ 類參與(反)序列化,必須要實現(xiàn)java.io.Serializable接口;該接口沒有任何的方法,只是將類標(biāo)記為一個可(反)序列化類
○ 如果父類是可序列化類,子類也是可序列化類
○ 每個可序列化類都要去實現(xiàn)一個名稱為serialVersionUID序列化ID

○ 標(biāo)記為transient的屬性將不參與序列化和反序列化

○ 靜態(tài)屬性不參數(shù)序列化和反序列化
○ 可序列化類的屬性也必須是可序列化的
○ java.io.Reader和java.io.Writer分別是字符流的讀取和寫入的父類
○ OutputStreamWriter是Writer類的子類,用于將字符流和字節(jié)流相互轉(zhuǎn)換
○ InputStreamReader是Reader類的子類,用于將字節(jié)流和字符流相互轉(zhuǎn)換
○ BufferReader和BufferedWriter是具有緩沖功能的Reader和Writer,同樣它們使用了裝飾者模式
○ FileReader和FileWriter在構(gòu)造方法上比其他的Reader和Writer較為簡便
○ PrintWriter可以方便的將內(nèi)容輸出到指定的目標(biāo)中,例如System.out中的out就是PrintStream類的對象,將內(nèi)容默認(rèn)輸出的標(biāo)準(zhǔn)輸出流(屏幕)
? 多線程
??? ○ Java中創(chuàng)建線程的方式
??????? ? 繼承自java.lang.Thread類,并重寫run方法(線程運行時要做的事情)

??????? ? 實現(xiàn)java.lang.Runnable接口,并實現(xiàn)run方法

○ 當(dāng)線程是通過繼承自Thread類來實現(xiàn)的,那么就可以通過調(diào)用父類的start()方法來啟動線程,線程啟動后JVM會調(diào)用線程類中的run()方法

○ 當(dāng)線程類是通過實現(xiàn)Runnable接口來實現(xiàn)的,那么必須通過Thread類來啟動

○ 線程的生命周期

○ 線程一旦死亡則不能再次使用(調(diào)用start())
○ 調(diào)用Thread類的靜態(tài)方法sleep()可以讓線程進(jìn)行休眠,線程休眠后將會進(jìn)入阻塞狀態(tài)
○ Join線程和守護(hù)線程

○ 產(chǎn)生線程不安全的條件
??? ? 在多線程情況下
??? ? 同一個對象
??? ? 實例變量(屬性)
○ 解決線程不安全
??? ? 給方法加鎖(使用synchronized關(guān)鍵字)

??? ? 同步代碼塊

? ? 使用ReentrantLock類

○ 可以通過Collections中的synchronizedXXX()放來使用線程安全的集合
后續(xù)持續(xù)更新~???