20165306 第五周學習任務
第五周學習任務
教材學習內容總結
7.1內部類
外嵌類的成員變量在內部類中仍然有效,內部類中的方法也可以調用外嵌類中的方法。
內部類的類體中不可以聲明類變量和類方法。外嵌類的類體中可以用內部類聲明對象,作為外嵌類的成員。
內部類僅供它的外嵌類使用,其他類不可以用某個類的內部類聲明對象。
例子1
7.2匿名類
匿名類就是一個子類,由於無名可用,所以不可能用匿名類聲明對象,卻可以直接用匿名類創建一個對象。
例子2
如果某個方法的參數是接口類型,那麽可以使用接口名和類體組合創建一個匿名對象傳遞給方法的參數,類體必須要重寫接口中的全部方法。
7.3異常類
Java使用try-catch語句來處理異常,將可能出現的異常操作放在try-catch語句的try部分,將發生異常後的處理放在catch部分。
例子4
一個方法在聲明時可以使用throws關鍵字聲明要產生的若幹個異常,並在該方法的方法體中具體給出產生異常的操作,即用相應的異常類創建對象,並使用throw關鍵字拋出該異常對象,導致該方法結束執行。註:throw和throws是兩個不同的關鍵字。
例子5
7.4斷言
斷言語句一般用於程序不準備通過捕獲異常來處理的錯誤。
斷言語句的兩種格式:當booleanExpression的值是true時,程序從斷言語句處繼續執行;值是false時,程序從斷言語句處停止執行。
assert booleanExpression;
assert booleanExpression:messageExpression;
當運行應用程序時,默認地關閉斷言語句,在調試程序時可以使用-ea啟用斷言語句,例如: java -ea mainClass
例子6
10.1.2目錄
調用方法public boolean mkdir()創建一個目錄,如果創建成功返回true,否則返回false(如果該目錄已經存在將返回false)。
public String [] list()
用字符串形式返回目錄下的全部文件;public File [] listFiles()
用File對象形式返回目錄下的全部文件。
10.1.3文件的創建與刪除
public boolean createNewFile();
file.delate();
可以刪除當前文件。
10.1.4運行可執行文件
Runtime ec;
使用Runtime類聲明一個對象
ec=Runtime.getRuntime()
使用getRuntime()靜態方法創建這個對象
ec可以調用exec(String command)方法打開本地機器上的可執行文件或執行一個操作。
10.2~10.9
FileInputStream文件字節輸入流,FileOutputStream文件字節輸出流,
FileReader文件字符輸入流,FileWriter文件字符輸出流,
BufferedReader緩沖輸入流,BufferedWriter緩沖輸出流,
RandomAccessFile隨機流,
ByteArrayInputStream字節數組輸入流,ByteArrayOutputStream字節數組輸出流,
DataInputStream數據輸入流,DataOutputStream數據輸出流,
ObjectInputStream對象輸入流,ObjectOutputStream對象輸出流。
例子13
10.10序列化與對象克隆
使用對象流很容易獲取一個序列化對象的克隆,只需將該對象寫入對象輸出流指向的目的地,然後將該目的地作為一個對象輸入流的源,那麽該對象輸入流從源中讀出的對象一定是原對象的一個克隆。
教材中的問題和解決過程
問題1:
P163Java編譯器生成的內部類的字節碼文件的名字和通常的類不同,內部類對應的字節碼文件的名字格式是“外嵌類名&內部類名”。
解答:
起初我不確定是否要把文件名或者主類名改成和“RedCowForm$RedCow”有關的,所以按照平常的做法,把“RedCowForm.java”和“E71”統一放到了“E71”文件夾中,發現可以正常編譯運行,然後執行“tree”命令,原來內部類的字節碼文件名本身就是“RedCowForm&RedCow.class”。
問題2:
P163內部類可以被修飾為static內部類,static內部類不能操作外嵌類中的實例成員變量。非內部類不可以是static類。
在第四章學到用static修飾的是類方法(靜態方法)、類變量(靜態變量),不用static修飾的是實例方法、實例變量,那麽static類又是什麽?
解答:
查找資料知道了:
(1)靜態內部類不需要有指向外部類的引用;非靜態內部類需要持有對外部類的引用。
(2)靜態內部類可以聲明普通成員變量和方法;非靜態內部類不能聲明static成員變量和方法。
(3)靜態內部類不能訪問外部類的非靜態成員,只能訪問外部類的靜態成員;非靜態內部類能夠訪問外部類的靜態和非靜態成員。
(4)靜態內部類可以單獨創建;非靜態內部類不能脫離外部類實體被創建,它可以訪問外部類的數據和方法,因為它就在外部類裏面。
代碼托管
上周考試錯題總結
- 類是Java程序的基本要素(基本單位),是Java語言中最重要的“數據類型”。
- 寫一個方法和C語言中寫一個函數完全類似。
- 用一個類創建兩個對象obj1和obj2後,二者的引用是不同的。
obj2=obj1;
這樣obj2中存放的將是obj1中存放的將是obj1的值,即obj1的引用。因此,obj2所擁有的變量(實體),就和obj1完全一樣了。 - 類變量與實例變量的區別:不同對象的實例變量互不相同,所有對象共享類變量;實例變量可以通過對象訪問,類變量可以通過對象、類名訪問。
- 類方法與實例方法的區別:對象調用實例方法,對象、類名調用類方法;實例方法操作實例、類變量,類方法操作類變量。
- 方法的返回類型和參數的名字不參與比較,即如果兩個方法的名字相同,即使返回類型不同,也必須保證參數不同。
- this不能出現在類方法中,這是因為類方法可以通過類名直接調用,這時可能還沒有任何對象產生。
- 類中的實例方法總是可以操作該類中的實例變量和類變量,類方法總是可以操作該類中的類變量,與訪問限制符沒有關系。
- 如果源文件使用import語句引用了另外一個包中的類,並用該類創建了一個對象,那麽該類的這個對象將不能訪問自己的友好變量和友好方法。
String a="ab"+"cd";
創建了3個對象。解析:“ab”和“cd”分別創建了一個對象,它們通過“+”連接後又創建了一個對象“abcd”,因此一共3個對象。只有使用引號包含文本的方式創建的String對象之間使用“+”連接產生的新對象才會被加入字符串池中。
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 48/48 | 1/1 | 10/10 | |
第二周 | 204/252 | 3/4 | 20/30 | |
第三周 | 1773/2025 | 2/6 | 15/45 | |
第四周 | 1636/3661 | 2/8 | 10/55 | |
第五周 | 1051/3198 | 1/9 | 8/63 |
20165306 第五周學習任務