1:異常(理解)
(1)程序出現(xiàn)的不正常的情況毅舆。
(2)異常的體系
Throwable
|--Error 嚴重問題西篓,我們不處理。
|--Exception
|--RuntimeException 運行期異常憋活,我們需要修正代碼
|--非RuntimeException 編譯期異常岂津,必須處理的,否則程序編譯不通過
(3)異常的處理:
A:JVM的默認處理
把異常的名稱,原因,位置等信息輸出在控制臺悦即,但是呢程序不能繼續(xù)執(zhí)行了吮成。
B:自己處理
a:try...catch...finally
自己編寫處理代碼,后面的程序可以繼續(xù)執(zhí)行
b:throws
把自己處理不了的,在方法上聲明盐欺,告訴調(diào)用者,這里有問題
(4)面試題
A:編譯期異常和運行期異常的區(qū)別?
編譯期異常 必須要處理的冗美,否則編譯不通過
運行期異常 可以不處理,也可以處理
B:throw和throws是的區(qū)別
throw:
在方法體中,后面跟的是異常對象名,并且只能是一個
throw拋出的是一個異常對象节预,說明這里肯定有一個異常產(chǎn)生了
throws:
在方法聲明上,后面跟的是異常的類名,可以是多個
throws是聲明方法有異常,是一種可能性安拟,這個異常并不一定會產(chǎn)生
(5)finally關(guān)鍵字及其面試題
A:finally用于釋放資源宵喂,它的代碼永遠會執(zhí)行。特殊情況:在執(zhí)行到finally之前jvm退出了
B:面試題
a:final,finally,finalize的區(qū)別?
final:最終的意思锅棕,可以修飾類,成員變量顾瞻,成員方法
修飾類,類不能被繼承
修飾變量荷荤,變量是常量
修飾方法移稳,方法不能被重寫
finally:是異常處理的一部分,用于釋放資源个粱。
一般來說,代碼肯定會執(zhí)行几蜻,特殊情況:在執(zhí)行到finally之前jvm退出了
finalize:是Object類的一個方法,用于垃圾回收
b:如果在catch里面有return,請問finally還執(zhí)行嗎?如果執(zhí)行,在return前還是后
會颖低,前弧烤。
實際上在中間。這個上課我們講過
C:異常處理的變形
try...catch...finally
try...catch...
try...catch...catch...
try...catch...catch...fianlly
try...finally
(6)自定義異常
繼承自Exception或者RuntimeException,只需要提供無參構(gòu)造和一個帶參構(gòu)造即可
(7)異常的注意實現(xiàn)
A:父的方法有異常拋出,子的重寫方法在拋出異常的時候必須要小于等于父的異常
B:父的方法沒有異常拋出,子的重寫方法不能有異常拋出
C:父的方法拋出多個異常,子的重寫方法必須比父少或者小
2:File(掌握)
(1)IO流操作中大部分都是對文件的操作暇昂,所以Java就提供了File類供我們來操作文件
(2)構(gòu)造方法
A:File file = new File("e:\demo\a.txt");
B:File file = new File("e:\demo","a.txt");
C:File file = new File("e:\demo");
File file2 = new File(file,"a.txt");
(3)File類的功能(自己補齊)
A:創(chuàng)建功能
*public boolean createNewFile():創(chuàng)建文件 如果存在這樣的文件,就不創(chuàng)建了
*public boolean mkdir():創(chuàng)建文件夾 如果存在這樣的文件夾从铲,就不創(chuàng)建了
*public boolean mkdirs():創(chuàng)建文件夾,如果父文件夾不存在澄暮,會幫你創(chuàng)建出來
B:刪除功能:public boolean delete()
注意:
A:如果你創(chuàng)建文件或者文件夾忘了寫盤符路徑,那么泣懊,默認在項目路徑下。
B:Java中的刪除不走回收站馍刮。
C:要刪除一個文件夾,請注意該文件夾內(nèi)不能包含文件或者文件夾
C:重命名功能
重命名功能:public boolean renameTo(File dest)
如果路徑名相同静稻,就是改名。
如果路徑名不同姊扔,就是改名并剪切梅誓。
路徑以盤符開始:絕對路徑 c:\a.txt
路徑不以盤符開始:相對路徑 a.txt
D:判斷功能
*public boolean isDirectory():判斷是否是目錄
- public boolean isFile():判斷是否是文件
- public boolean exists():判斷是否存在
- public boolean canRead():判斷是否可讀
- public boolean canWrite():判斷是否可寫
- public boolean isHidden():判斷是否隱藏
E:獲取功能 - public String getAbsolutePath():獲取絕對路徑
- public String getPath():獲取相對路徑
- public String getName():獲取名稱
- public long length():獲取長度。字節(jié)數(shù)
- public long lastModified():獲取最后一次的修改時間嵌言,毫秒值
F:高級獲取功能 - public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數(shù)組
- public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數(shù)組
G:過濾器功能 - 要想實現(xiàn)這個效果,就必須學(xué)習(xí)一個接口:文件名稱過濾器
- public String[] list(FilenameFilter filter)
- public File[] listFiles(FilenameFilter filter)
public static void main(String[] args) {
// 封裝e判斷目錄
File file = new File("e:\\");
// 獲取該目錄下所有文件或者文件夾的String數(shù)組
// public String[] list(FilenameFilter filter)
// FilenameFilte是一個接口摧茴,實際要的是接口的實現(xiàn)類
String[] strArray = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isFile() && name.endsWith(".jpg");
}
});
// 遍歷
for (String s : strArray) {
System.out.println(s);
}
}
(4)案例:
A:輸出指定目錄下指定后綴名的文件名稱
a:先獲取所有的埂陆,在遍歷的時候判斷娃豹,再輸出
b:先判斷购裙,再獲取,最后直接遍歷輸出即可
B:批量修改文件名稱