20165318 2017-2018-2 《Java程序設計》第五周學習總結
20165318 2017-2018-2 《Java程序設計》第五周學習總結
學習總結
- 在使用IDEA時,由於我之前編寫的代碼都是使用GBK編碼,使用IDEA打開時,由於IDEA默認為UTF-8,代碼會出現中文亂碼,這時候可以使用如下方法,將IDEA的編碼改成GBK
教材內容總結:
第七章 內部類與異常類
一、 內部類與匿名類
內部類:
1.內部類可以使用外嵌類的成員變量和方法。
2.類體中不可以聲明類變量和類方法。
3.內部類僅供外嵌類使用。
4.類聲明可以使用static修飾,static內部類不能操作外嵌類中的實例成員變量。
註:非內部類不可以是static類。匿名類:
1.匿名類一定是內部類。
2.可以使用外嵌類的成員變量和方法。
3.不能聲明類變量和類方法。
4.必須使用父類的構造方法。
5.可以直接使用父類的方法,也可重寫。
用bank的一個子類(匿名類)創建對象
new Bank() { //使用父類的構造方法
匿名類的類體
}; //**註意:結尾加分號**
與接口有關的匿名類
new Computable() {
實現接口的匿名類的類體 //**類體必須要重寫接口中的全部方法**
};
二、異常類
異常是指程序運行時可能出現的一些錯誤。
public static int parseInt(String s)
可以將“數字”格式的字符串轉化為 int 型數據。try - catch
語句
`try { 包含可能發生異常的語句 } catch(ExceptionSubClass1 a) { ... } catch(ExceptionSubClass1 b) { ... }
一旦
try
部分拋出異常,或調用某個可能拋出異常對象的方法,並且該方法拋出了異常對象,那麽try
部分將立刻結束執行,轉向相應的catch
部分。程序可以將發生異常後的處理放在catch
部分。try - catch
語句可以由幾個catch
組成,分別處理發生的相應異常。各個
catch
參數中的異常類都是Exception
的某個子類,表示try
部分可能發生的異常,這些子類之間不能有父子關系,否則保留一個含有父類參數的catch
即可。自定義異常類的步驟:
1.定義自己的異常類(Exception
的子類);
2.在可能出現異常的方法中,聲明時使用throws關鍵字聲明要產生的若幹個異常,並在方法體中具體給出產生異常的操作,用throw
3.在程序中使用try-catch
塊語句調用可能發生異常的方法。finally
語句- 如果在
try-catch
語句中執行了return
語句,那麽finally
子語句依舊會被執行。 try-catch
語句中執行了程序退出代碼,執行System.exit(0)
;那麽不執行finally
子語句。
- 如果在
三、斷言
程序正式運行時,斷言語句自動關閉,可以使用
java -ea
文件名;程序調試階段,斷言語句發揮正常作用;
- 斷言語句的兩種格式
assert bolleanException
:當bolleanException
的值是true時,程序從斷言語句處繼續執行;值是false時,程序從斷言語句處停止執行。assert blooeanException:messageException
:當bolleanException
的值是true時,程序從斷言語句處繼續執行;值是false時,程序從斷言語句處停止執行,並輸出messageException
表達式的值。
第十章 輸入、輸出流
輸入流的指向稱為它的源,程序通過輸入流讀取源中的數據
輸出流的指向稱為它的目的地,程序通過輸出流把數據傳送到目的地
一、File類
File類的對象主要用來獲取文件本身一些信息,不涉及對文件的讀寫操作。
構造方法 :
File(String filename)
File(String directoryPath,String filename)
File(File dir,String filename)
文件的屬性:常使用File類的一些方法獲取文件本身的一些信息。
創建目錄:File對象調用方法
public boolean mkdir()
創建一個目錄,成功返回true,否則(該目錄已存在)返回false。運行可執行文件:
Runtime ec = Runtime.getRuntime();
。使用輸入流步驟:
1.設定輸入流的源;
2.創建指向源的輸入流;
3.讓輸入流讀取源中的數據;
4.關閉輸入流;
註:程序必須在try-catch
語句中的try
塊部分創建輸入流,在catch
塊部分檢測並處理這個異常。
輸出流步驟與輸入流類似
讀取 :輸入流讀取
int read
方法,輸出流讀取void write
方法。關閉流:輸入流
in.close();
,輸出流void.close();
。緩沖流
1.BufferedReader
和BufferedWriter
類創建的對象稱為緩沖輸入、輸出流,二者增強了讀寫文件的能力。
2.BufferedReader
流和BufferedWriter
流,二者的源和目的地必須是字符輸入流和輸出流。
3.構造方法BufferedReader(Reader in);``BufferedWriter(Writer out);
。
隨機流
1.RandomAccessFile
類創建的流稱為隨機流,可以從這個流中讀取文件的數據,也可以通過這個流寫入數據到文件。
2.RandomAccessFile
流指向文件時,不刷新文件。數組流
數據流
對象流
使用Scanner類和正則表達式來解析文件的特點是以時間換取空間,即解析的速度相對比較慢,但節省內存
教材中問題與解決過程
問題1:為什麽要使用匿名類:
解決過程:如果一個方法的參數類型是A類,用戶希望向方法傳遞A的子類對象,但系統沒有提供符合要求的子類,那麽用戶在編寫代碼時就可以考慮使用匿名類。
代碼調試過程中的問題與解決過程
問題1:運行Example7_2時報錯
解決過程:檢查後發現,使用輸出方法時,習慣性的使用了
System.out.println
而正確的代碼是System.out.printf
。問題2:運行Example7_7時出現以下問題
解決過程:仔細檢查代碼後發現,在編碼時多寫了一個“}”,導致主類沒辦法被識別,使用IDEA中的代碼格式化也沒有發現錯誤。
問題3:自己編寫課後習題第四大題,使用斷言,本應該當輸入數字大於100或小於0時,終止執行,但實際運行卻出現如下錯誤:
- 解決過程:重新學習斷言相關知識點時發現,當斷言判斷條件為true時,程序繼續執行,為false時,才會停止執行。而我第一遍看的時候沒有記清楚,剛好將判斷條件寫反了,導致程序不能運行,改正過後,就可以正常運行了。結果如下圖:
問題4:調試Example10_2時,運行後沒有輸出結果。
解決過程:看書中相關知識後,發現我輸入流打開的目錄中沒有
.java
類型的文件,在這個目錄中添加.java
類型的文件,就可以正常運行了。問題5:調試Example10_4時,運行提示以下錯誤:
解決過程:問題在於打開文件的路徑不正確,將
Example10_4.java
改為src/Example10_4.java
就可以正常運行了。問題6:運行Example10_17時,對話框不會操作問題,實際輸出的對話框與書上的截圖有差距
- 解決過程:需要點擊左上角的“文件”下拉菜單的“打開”,才能得到書上截圖的效果。同時我發現如果把 “楷體_gb2312” 改為 “UTF-8” 不會影響窗口的操作性。
碼雲鏈接
https://gitee.com/besti-is-java-2018/20165318_sun_xiaoxuan
代碼截圖
20165318 2017-2018-2 《Java程序設計》第五周學習總結