Java--異常處理
當程式執行出現意外情況時,系統會自動生成一個Exception物件來通知程式,從而實現將業務處理程式碼和異常處理程式碼分離,提供更好的可讀性。
return和finally
2.1
public class TextMain {
public static void main(String[] args) {
System.out.println("返回值:"+test01());
}
public static Integer test01() {
User user = null;
try {
System.out.println(user.getName());
System.out.println("出現錯誤後");
return 1;
} catch (NullPointerException e) {
System.out.println("執行異常資訊輸出");
System.out.println(e.getMessage());
//System.exit(1);
return 2;
} finally {
System.out.println("執行 Finally");
}
}
}
class User {
private String name;
public String getName() {
return name;
}
}
finally被用來強制在return之前執行需要被執行的程式碼,如上程式碼中,在異常處理中的最後新增return語句,還是在return執行之前執行了finally中的程式碼。
除非出現退出虛擬機器的情況。開啟如上程式碼中的註釋。控制檯輸出如下:
退出虛擬機器後就不存在執行程式碼這個的說法。
2.2
public class TextMain {
public static void main(String[] args) {
System.out.println("返回值:"+test01());
}
public static Integer test01() {
User user = null;
try {
System.out.println(user.getName());
System.out.println("出現錯誤後");
return 1;
} catch (NullPointerException e) {
System.out.println("執行異常資訊輸出");
System.out.println(e.getMessage());
//System.exit(1);
return 2;
} finally {
System.out.println("執行 Finally");
return 3;
}
}
}
class User {
private String name;
public String getName() {
return name;
}
}
當程式在try、catch中如果執行到return、throw語句,將會去檢視當前異常處理流中是否包含finally語句,如果包含會去執行finally語句,沒有執行的話會直接執行,但是有的話會進入finally中執行,如果在finally中包含return或者throw語句,將不會跳轉到try、catch中的return、throw語句。
結論:儘量不要在finally中使用return或者throw語句。
- 自定義異常
自定義異常都應該繼承Exception基類,如果希望自定義Runtime異常,應該繼承RuntimeException基類。定義的異常類應該包含兩個構造器,一個是無引數的構造器,一個是帶字串引數的構造器,這個引數將作為異常物件的描述資訊。
自定義異常:
public class AuctionException extends Exception {
public AuctionException() {
};
public AuctionException(String msg) {
super(msg);
}
}
使用自定義的異常:
public class AuctionTest {
public static void main(String[] args) {
try {
bid();
} catch (AuctionException e) {
System.out.println(e.getMessage());
}
}
public static void bid() throws AuctionException {
try {
System.out.println(1 / 0);
} catch (Exception e) {
e.printStackTrace();
throw new AuctionException("執行錯誤");
}
}
}
cache和throw同時使用,捕獲異常記錄異常資訊,同時丟擲異常資訊給呼叫者處理。
處理異常的原則:
1 不要忽視異常,能在當前方法中處理,不能就throw拋給呼叫者處理
2 異常鋪貨時,應該先鋪貨小異常,再捕獲大異常。
部分摘自瘋狂英語。
3 unchecked異常和checked異常
public class TestMain {
public static void main(String[] args) {
try {
//checked異常
throw new CheckedGenericException("checked exception");
} catch (CheckedGenericException e) {
e.printStackTrace();
}
//Unchecked異常
throw new UnCheckedException("unchecked exception");
//throw new NullPointerException("not checked exception");
}
public static class CheckedGenericException extends Exception {
private static final long serialVersionUID = 1L;
public CheckedGenericException() {
}
public CheckedGenericException(String msg) {
super(msg);
}
}
public static class UnCheckedException extends RuntimeException {
private static final long serialVersionUID = 1L;
public UnCheckedException() {
}
public UnCheckedException(String msg) {
super(msg);
}
}
}
相關文章
- 異常篇——異常處理
- 異常處理
- Java--異常的學習Java
- 異常-throws的方式處理異常
- 異常處理與異常函式函式
- JavaScript 異常處理JavaScript
- ThinkPHP 異常處理PHP
- React 異常處理React
- 08、異常處理
- JAVA 異常處理Java
- JAVA異常處理Java
- Abp 異常處理
- oracle異常處理Oracle
- PowerShell 異常處理
- plsql異常處理SQL
- Swift 異常處理Swift
- JS異常處理JS
- app異常處理APP
- Oracle 處理異常Oracle
- MySQL異常處理MySql
- 異常處理 (轉)
- golang - 異常處理Golang
- 異常處理2
- 異常處理1
- 異常的處理
- Java 異常處理Java
- 異常處理機制(二)之異常處理與捕獲
- JSP 異常處理如何處理?JS
- Java 異常表與異常處理原理Java
- restframework 異常處理及自定義異常RESTFramework
- windows核心程式設計---未處理異常,向量化異常處理與C++異常Windows程式設計C++
- Python異常處理Python
- PHP 核心 - 異常處理PHP
- Python——異常處理Python
- JAVA_異常處理Java
- SpringMVC異常處理SpringMVC
- 異常處理過程
- C++ 異常處理C++