高精度計算模板 -感謝acwing
阿新 • • 發佈:2022-05-17
1,異常是什麼
JVM 針對於程式碼執行過程中,出現的錯誤,異常資訊,打包之後丟擲到方法內部或者自行處理
在異常資訊中,需要給予開發者足夠的資訊提示,包括異常和錯誤的前因後果
Java 中異常基類
Throwable 類 Java 中所有異常和錯誤的基類,規定了基礎方法,和必要的構造方法形式
Throwable 中有兩個子類
Error 錯誤
Exception 異常
2. Throwable 核心方法
構造方法相關: Throwable(); 建立 Throwable 物件, Throwable 物件中錯誤/異常資訊為 null 異常資訊為 null Throwable(String message); 建立 Throwable 物件,Throwable 物件中錯誤/異常資訊為 message 成員方法相關: String toString(); 獲取錯誤/異常的簡要資訊描述,包括出現錯誤/異常型別資訊。 例如: java.lang.ArrayIndexOutOfBoundsException:10 String getMessage(); 僅獲取當前錯誤/異常中儲存的異常資訊 void printStackTrace(); 在控制檯展示錯誤的前因後果,紅色字型!!!
/* * Throwable 類 * 程式碼中出現錯誤/異常 JVM會自動選擇建立對應型別的錯誤/異常 */ public class Demo1 { public static void main(String[] args) { Throwable throwable = new Throwable("有啥別有病,沒啥別沒錢"); // System.out.println("getMessage : " + throwable.getMessage()); // System.out.println("toString : " + throwable.toString()); // throwable.printStackTrace(); test(); } private static void test() { Throwable throwable = new Throwable("異常演示"); throwable.printStackTrace(); } }
3. 異常和錯誤的區別
異常:
Exception
車小剮小蹭 異常,可以維修!!!
車有大故障!!!街邊的修理廠,不行,修不了,你可以考慮去4S
捕獲
丟擲
錯誤:
Error
"720" 你的車在地下車庫三層,你的車距離水面以上有將近15米,泡了一個半月。
車直接報廢!!!
最大區別就是錯誤和異常型別結尾單詞不同!!!
4.異常處理兩種形式
4.1捕獲異常
格式: try { // 有可能出現異常的程式碼 JVM會自動建立對應異常型別,同時提供必要的異常資訊 } catch(異常型別物件1) { // 針對當前異常型別的處理方式 } catch(異常型別物件2) { // 針對當前異常型別的處理方式 } try { } catch() { } finally { }
/*
* 檔案操作演示異常問題
*
* FileNotFoundException 檔案未找到!!!
*/
public class Demo2 {
public static void main(String[] args) {
try {
/*
* Unhandled exception type FileNotFoundException
* 未處理異常,異常型別為 FileNotFoundException 檔案未找到異常
*
* Ctrl + 1 快速修復
* surround with try/catch
*/
FileInputStream fis = new FileInputStream("G:/aaa/1.txt");
/*
* Unhandled exception type SQLException
* 未處理異常,異常型別為 SQLException 資料庫異常
*/
Connection connection = DriverManager.getConnection(null);
} catch (FileNotFoundException e) {
// 針對於檔案未找到異常情況處理
System.out.println("日誌記錄:");
e.printStackTrace();
} catch (SQLException e) {
// 針對 SQL 資料庫異常處理
System.out.println("日誌記錄:");
e.printStackTrace();
}
System.out.println("程式碼繼續執行.....");
}
}
1, 在 try 大括號是有可能出現異常的程式碼
2,程式碼如果有異常存在,JVM 會在執行階段建立對應異常物件,保留必要資訊,可以提供給
catch 塊捕獲異常
3,在 catch 小括號中是針對於異常的處理型別
4, JDK 1.8 中允許出現一個 catch 塊同時捕獲多個異常,使用 位或(二進位制運算子)
案例
catch (FileNotFoundException | SQLException e)
5. 在 catch 塊是針對當前異常的處理方式,後期可以進行日誌記錄,訊息記錄,轉發給其他程式,提供給使用者一定的提示頁面
6. 如果程式碼執行 try catch 獲取異常之後,JVM 認為當前程式中沒有異常,程式碼可以從 catch 塊之後繼續執行。
4.2 捕獲異常
關鍵字
throw 在方法內部指定情況下,丟擲異常物件!!!
throws 在方法宣告位置,告知呼叫者當前方法有哪些異常丟擲!!!
import java.io.FileNotFoundException;
import java.sql.SQLException;
public class Demo4 {
public static void main(String[] args) throws FileNotFoundException, SQLException {
// 呼叫帶有異常丟擲的方法,第一種方式,捕獲異常
try {
test("111", "222");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 呼叫帶有異常丟擲的方法,第二種方式,捕獲異常 按照 JDK 1.8 規則可以用一個 catch 利用【位或】處理多個異常
try {
test("111", "222");
} catch (FileNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 呼叫帶有異常丟擲的方法,第三種方式 繼續丟擲異常
test("111", "222");
}
/*
* @throws 文件註釋中用於提示使用者當前方法有哪些異常丟擲
*/
/**
* 測試方法
*
* @param fileName 檔名稱
* @throws FileNotFoundException 檔案未找到異常
* @throws SQLException SQL異常
*/
public static void test(String fileName, String sql) throws FileNotFoundException, SQLException {
// 如果檔名不合法,丟擲 FileNotFoundException 檔案未找到異常!
if (null == fileName) {
/*
* 丟擲異常,當前檔案未找到
* throw 方法內部丟擲異常關鍵字
* new FileNotFoundException("給予方法檔名稱不合法!");
* 建立了一個 FileNotFoundException 異常物件,同時給予必要的異常資訊 message ==> "給予方法檔名稱不合法!"
*
* Unhandled exception type FileNotFoundException
* 未處理異常,異常型別 FileNotFoundException
*/
throw new FileNotFoundException("給予方法檔名稱不合法!");
}
if (null == sql) {
throw new SQLException("SQL異常");
}
}
}
4.3 丟擲和捕獲的選擇
5. 編譯時異常和執行時異常
import java.sql.SQLException;
public class Demo5 {
public static void main(String[] args) {
}
/*
* JVM虛擬機器針對於異常型別進行了分類
* 1. 編譯時異常
* 在程式碼編譯階段對異常進行丟擲或者捕獲處理,解決方法中出現的異常問題
* 2. 執行時異常
* JVM針對於執行時異常有一定的處置方式,同時這一類異常較為普遍
* 例如:
* ArrayIndexOutOfBoundsException 陣列下標越界異常
* NullPointerException 空指標異常
* StringIndexOutOfBoundsException 字串下標越級異常
*/
public static void test() throws SQLException {
// throw new ArrayIndexOutOfBoundsException("陣列下標越級異常");
throw new SQLException("SQL語句異常");
}
}