JavaDay19 例外與檔案
https://github.com/Philbenzy/Java-question-100/tree/main/day19
(1)例外
(2)File類
1-例外
(1)例外體系
- Throwable:例外的頂層類
- Error:嚴重錯誤,不進行處理
- Exception:
- RuntimeException:運行時期出現的例外,是程式不嚴謹造成的,可以不處理,也可以處理
- 非RuntimeException:編譯時期出現的例外,必須對問題進行處理,要么拋出,要么使用try-catch進行處理
(2)例外的處理方式
- JVM的默認處理方式,意味著將出現的問題拋出給了虛擬機
- 呼叫者使用try-catch對例外進行處理
(3)編譯時期|運行時期例外的區別
- 編譯時期:編譯時期出現的例外被歸為「非RuntimeException類」,必須要進行處理,處理方式有兩種,要么使用throws繼續拋出,要么使用try-catch進行處理,
- 運行時期:運行時期出現的例外被歸為「RuntimeException類」,可以不處理,
(4)例外的try-catch-finally處理方式
- 單個例外處理方式1:
try{
...;
}catch(例外名稱 變數名稱){
針對問題的處理;
}finally{
釋放資源;
}
- 單個例外處理方式2:
try{
...;
}catch(例外名1 |例外名2|例外名3 變數){
...;
}
// 這樣進行處理例外時,如果在try中出現了多個例外,那么在catch中只會處理一個
// 例外之間應該改是平級的關系
- 多個例外出現時的處理方式1:
// 寫多個try-catch
try{
...;
}catch(例外名稱 變數名){
...;
}catch(例外名稱 變數名){
...;
}
注意:如果捕獲的例外是平級關系,那么順序不重要,但是如果是父子級別型別的例外,父應該出現在最后
(5)throw與throws關鍵字
throw:
- 宣告在方法體內,使用new關鍵字創建例外物件
- 表示拋出例外,可以得到一個物體的例外物件
throws:
- 宣告在方法名稱上,表示一種拋出例外的可能性,不一定會出現
- 后面可以接多個型別例外,例外名稱使用逗號隔開
- 表示向外拋出例外,由方法的呼叫者處理
(6)finally關鍵字
finally關鍵字用于最后的釋放資源,被finally修飾的陳述句一定會執行,但是如果在執行到了finally之間JVM退出了,那么就不能繼續執行了;
(7)final、finally、finalize區別
- final關鍵字用于修飾成員變數、方法、類
- 成員變數:變為常量,不可被重新賦值
- 方法:不可被子類重寫
- 類:不能被繼承
- finally表示最終的意思,屬于例外處理的最后一步,用來釋放資源
- 如果catch里有return陳述句,那么finally里面的代碼還會執行嗎?例子如下:
public class FinallyDemo2 {
public static void main(String[] args) {
System.out.println(getInt());
}
public static int getInt() {
int a = 10;
try {
System.out.println(a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
return a;
/*
* return a在程式執行到這一步的時候,這里不是return a而是return 30;這個回傳路徑就形成了,
* 但是呢,它發現后面還有finally,所以繼續執行finally的內容,a=40
* 再次回到以前的回傳路徑,繼續走return 30;
*/
} finally {
a = 40;
return a;//如果這樣結果就是40了,
}
// return a;
}
}
- finalize是Object類的一個方法,用于垃圾回收
(8)自定義例外
如果要自定義例外,那么就需要讓這個類繼承
- Exception
- RuntimeException
(9)例外與繼承
- 父類拋出了例外,那么繼承父類的子類拋出的例外 >= 父類的例外,子類不能拋出父類沒有的例外
- 父類如果沒有例外拋出,那么子類也不能拋出例外,如果還想處理只能使用try-catch-finally處理
2-File類
(1)File類的構造方法
-
File(String pathname):根據一個路徑得到File物件 -
File(String parent, String child):根據一個目錄和一個子檔案/目錄得到File物件 -
File(File parent, String child):根據一個父File物件和一個子檔案/目錄得到File物件
(2)File類基本功能
- 創建功能:public boolean createNewFile():創建檔案 如果存在這樣的檔案,就不創建了
- 洗掉功能:public boolean delete():洗掉不走回收站
- 重命名功能:public boolean renameTo(File dest):可以做到改名與剪貼
- 判斷功能:
- public boolean isDirectory():判斷是否是目錄
- public boolean isFile():判斷是否是檔案
- public boolean exists():判斷是否存在
- public boolean canRead():判斷是否可讀
- public boolean canWrite():判斷是否可寫
- public boolean isHidden():判斷是否隱藏
- 獲取功能
- public String getAbsolutePath():獲取絕對路徑
- public String getPath():獲取相對路徑
- public String getName():獲取名稱
- public long length():獲取長度,位元組數
- public long lastModified():獲取最后一次的修改時間,毫秒值
- 高級獲取功能
- 過濾器功能
- public String[] list():獲取指定目錄下的所有檔案或者檔案夾的名稱陣列
- public File[] listFiles():獲取指定目錄下的所有檔案或者檔案夾的File陣列
(3)案例演示
- 輸出指定目錄下的指定后綴名檔案
- 獲取-遍歷-輸出:案例演示「GetFilesName.java」
- 使用FilenameFilter()得到:案例演示:「GetFilesName2.java」
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/258712.html
標籤:java
