1. 程式人生 > 實用技巧 >Java 基礎 - Java核心類庫 - 異常機制&File類

Java 基礎 - Java核心類庫 - 異常機制&File類

Java 基礎 - Java核心類庫 - 異常機制&File類

目錄

1 異常機制

1.1 異常機制的概念

異常就是"不正常"的含義,在Java語言中主要指程式執行中發生的不正常情況

1.2 Throwable 異常類

java.lang.Throwable類是Java語言中錯誤(Error)和異常(Exception)的超類

1.2.1 Error 和 Exception 的區別
  • Error類主要用於描述Java虛擬機器無法解決的嚴重錯誤,通常無法編碼解決,如:JVM掛掉了等
  • Exception類主要用於描述因程式設計錯誤或偶然外在因素導致的輕微錯誤,通常可以編碼解決, 如:0作為除數等
1.2.2 異常的分類

java.lang.Exception類是所有異常的超類,主要分為以下兩種:

  • RuntimeException - 執行時異常,也叫作非檢測性異常
  • IOException和其它異常 - 其它異常,也叫作檢測性異常,所謂檢測性異常就是指在編譯階段都能 被編譯器檢測出來的異常

RuntimeException類(執行時異常)的主要子類:

  • ArithmeticException類 - 算術異常
  • ArrayIndexOutOfBoundsException類 - 陣列下標越界異常
  • NullPointerException - 空指標異常
  • ClassCastException - 型別轉換異常
  • NumberFormatException - 數字格式異常

預設處理異常的方式

  • 當程式執行過程中發生異常但又沒有手動處理時,則由Java虛擬機器採用預設方式處理異常,而預設 處理方式就是:列印異常的名稱、異常發生的原因、異常發生的位置以及終止程式

如何避免異常的產生

  • 在以後的開發中儘量使用if條件判斷來避免異常的發生
  • 但是過多的if條件判斷會導致程式的程式碼加長、臃腫,可讀性差
1.2.3 異常的捕獲

格式:

try {
 編寫可能發生異常的程式碼;
}
catch(異常型別 引用變數名) {
 編寫針對該類異常的處理程式碼;
}
...
finally {
 編寫無論是否發生異常都要執行的程式碼;
}

異常捕獲的注意事項:

  • 當需要編寫多個catch分支時,切記小型別應該放在大型別的前面
  • 手動處理異常和沒有處理異常的區別在於程式碼是否可以繼續執行下去
try{
	程式碼發生異常
}
catch(){
	e.printStackTrace();
	retrun 1;
}
finally{
	retrun 2;
}

發生異常後返回2並結束程式,不會再返回1
1.2.4 異常的丟擲

異常丟擲的概念:

  • 在某些特殊情況下有些異常不能處理或者不便於處理時,就可以將該異常轉移給該方法的呼叫者, 這種方法就叫異常的丟擲
  • 當方法執行時出現異常,則底層生成一個異常類物件丟擲,此時異常代 碼後續的程式碼就不再執行(丟擲方式在產生異常後後續程式碼不再執行)
    • 如果異常發生在建立物件過程給屬性賦值的過程中,如果處理異常的方式為丟擲,則物件不會建立,該變數為null,如果處理異常的方式為try catch 處理,則物件會新建成功,非法的屬性值不會賦值成功使用其資料型別的預設值

異常丟擲的語法格式:

訪問許可權 返回值型別 方法名稱(形參列表) throws 異常型別1,異常型別2,...{ 方法體; }
如: public void show() throws IOException{}

方法重寫原則:

  • 要求方法名相同、引數列表相同以及返回值型別相同,從jdk1.5開始支援返回子類型別
  • 要求方法的訪問許可權不能變小,可以相同或者變大
  • 要求方法不能丟擲更大的異常

子類重寫方法時異常的處理方式:

  • 子類重寫的方法不能丟擲更大的異常也不能丟擲平級不一樣的異常,但可以丟擲一樣的異常或更小的異常以及不丟擲異常

異常的丟擲與捕獲如何選擇?

  • 若父類中被重寫的方法沒有丟擲異常時,則子類中重寫的方法只能進行異常的捕獲處理(子類不能丟擲更大的異常)
  • 若一個方法內部又以遞進方式分別呼叫了好幾個其它方法,則建議這些方法內可以使用丟擲 的方法處理到最後一層進行捕獲方式處理
1.2.5 自定義異常

為什麼需要自定義異常

  • 當需要在程式中表達年齡不合理的情況時,而Java官方又沒有提供這種針對性的異常,此時就需要 程式設計師自定義異常加以描述

自定義異常的實現流程

  • 自定義xxxException異常類繼承Exception類或者其子類
  • 提高序列化版本號和兩個版本的構造方法,一個是無參構造方法,另外一個是字串作為引數的構造方法
  • 在業務程式碼中進行邏輯判斷,若有異常則丟擲自定義異常類(throw new xxxExceprion("錯誤資訊"))
  • 將該異常拋給方法的呼叫者或者捕捉處理
public void xxx() thorws xxxException {}

或

public void xxx() {
	try{
	thorw new xxxException("錯誤資訊");
	}
	catch (xxxException e){
		e.printStackTrace();
	}
}
1.2.6 異常機制的優點
  • Java採用的異常處理機制是將異常處理的程式程式碼集中在一起,與正常的程式程式碼分開,使得程式 簡潔、優雅,並易於維護

2 File 類

2.1 基本概念

java.io.File類主要用於描述檔案或目錄路徑的抽象表示資訊,可以獲取檔案或目錄的特徵資訊, 如:大小等

2.2 File 類的常用方法

2.2.1 File 類構造放方法
方法 說明
File(String pathname) 根據引數指定的路徑名來構造物件
File(String parent, String child) 根據引數指定的父路徑和子路徑資訊構造物件(將完整的路徑拆分為父子路徑)
File(File parent, String child) 根據引數指定的父抽象路徑和子路徑資訊構造物件
2.2.2 File 類檔案基本屬性操作
方法 說明
String getName() 用於獲取檔案的名稱
long length() 返回由此抽象路徑名錶示的檔案的長度
long lastModified() 用於獲取檔案的最後一次修改時間
String getAbsolutePath() 用於獲取絕對路徑資訊
long lastModified() 該方法返回值為long 型別的毫秒數距離1970.1.1
//1. Date 類 和 Instant 的有參構造類建立物件
//2. 使用SimpleDateFormat 類或DateTimeFormatter 類用來轉換格式
2.2.3 File 類檔案管理操作
方法 說明
boolean delete() 用於刪除檔案,當刪除目錄時要求是空目錄
boolean createNewFile() 用於建立新的空檔案
boolean isFile() 判斷是否為檔案
2.2.4 File 類目錄管理操作
方法 說明
boolean isDirectory() 判斷是否為目錄
boolean mkdir() 用於建立目錄
boolean mkdirs() 用於建立多級目錄
File[] listFiles() 獲取該目錄下的所有內容
File[] listFiles(FileFilter filter) 獲取目錄下滿足篩選器的所有內容
File[] listFiles(FileFilter filter) 使用

FileFilter filter = (File file) -> {return file.getName.endsWith("xxx");};