A. java創建一個自定義異常類,並在一個方法中拋出自定義異常,在該方法的catch處理程序中捕獲並重新拋出
publicvoidMyException(Stringname){
if(null==name||"".equals(name)){
thrownewRuntimeException("姓名的格式不正確");
}
}
publicstaticvoidmain(String[]args){
try{
newaaa().MyException("");
}catch(RuntimeExceptione){
System.out.println(e.getMessage());
}
}
B. java中自定義異常為何要繼承exception類
java.lang.Exception類是Java中所有異常的直接或間接父類。即Exception類是所有異常的根類。
1、異常的分類:
① 非運行時異常(Checked Exception)
② 運行時異常(Runtime Exception/Unchecked Exception)
public class Exception
extends Throwable
Exception 類及其子類是 Throwable 的一種形式,它指出了合理的應用程序想要捕獲的條件。
public class RuntimeException
extends Exception
RuntimeException 是那些可能在 Java 虛擬機正常運行期間拋出的異常的超類。
可能在執行方法期間拋出但未被捕獲的 RuntimeException 的任何子類都無需在 throws 子句中進行聲明。
a) RuntimeException類直接繼承自Exception類,稱為運行時異常。Java中所有的運行時異常都直接或間接的繼承自RuntimeException.
Java中所有的異常類都直接或間接的繼承自Exception。
2、異常的處理:
對應非運行時異常,必須對其進行處理。處理方式有兩種:
使用try…catch…finally語句塊進行捕獲
在產生異常的方法所在的方法聲明throws Exception
對於運行時異常,可以不對其進行處理,也可以對其進行處理。一般情況下都不對其進行處理。
3、捕獲異常:
try {
FileInputStream fs = new FileInputStream("D:/temp/a.txt");
} catch (FileNotFoundException e) {
System.out.println("catch...");
e.printStackTrace();
} finally{
System.out.println("finally...");
}
4、拋出和捕獲異常:
4.1、把異常交給JVM處理:
public class ExceptionTest {
public static void execute() throws Exception {
System.out.println("execute...");
throw new Exception();
}
public static void main(String[] args) throws Exception {
execute();
}
}
4.2、或者使用try catch語句塊捕獲異常:
public class ExceptionTest {
public static void execute() throws Exception {
System.out.println("execute...");
throw new Exception();
}
public static void main(String[] args) {
try {
execute();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
5、自定義異常:
自定義異常通常是定義一個繼承自Exception類的子類。一般情況下我們都會直接繼承自Exception類,而不會繼承某個運行時的異常類。
5.1、創建自定義異常:
public class MyException extends Exception{
public MyException(){
super();
}
public MyException(String msg){
super(msg);
}
}
5.2、在類中使用異常:
public class ExceptionTest {
public static void execute(String a) throws MyException {
System.out.println("execute...");
if("true".equals(a)){
throw new MyException("參數不能為 true");
}
}
}
5.3、捕獲自定義異常:
public static void main(String[] args) throws MyException {
execute("true");
}
6、異常使用注意事項:
當使用多個catch語句塊來捕獲異常時,需要將父類的catch語句塊放到子類型的catch塊之後,這樣才能保證後續的catch可能被執行,否則子類型的catch將永遠無法到達,Java編譯器會報編譯錯誤。
如果try語句塊中存在return語句,那麼首先會執行finally語句塊中的代碼,然後才返回。
如果try語句塊中存在System.exit(0)語句,那麼久不會執行finally語句塊的代碼了,因為System.exit(0)會終止當前運行的JVM。程序在JVM終止前結束執行。
C. Java自定義異常,應該繼承Exception還是Runtime Exception,為什麼
/*
RuntimeException屬於Exception的子類
Exception是在編譯時候如果有異常就可以檢查出來,比較嚴謹!
RuntimeException比較特殊,他及其子類對象,屬於運行時候檢查的異常,如果語法沒有錯誤
他不會在編譯時候報異常的,只有運行的時候才會拋出異常!
至於繼承誰,得看你的類具體的功能,其實這兩點已經說的很明確了,如果你繼承了Exception
要麼拋出去給上級調用者,要麼調用異常代碼的時候進行捕捉,有相對應的處理方式!
如果繼承的是RuntimeException,可以不用拋,也可以不用捕捉但是問題是在運行的過程中才會
展現出來!一但出錯,後面程序將無法繼續運行!
*/
D. 在JAVA中如何創建一個自定義異常
自定義異常類型是從Exception類中派生的,所以要使用下面的聲明語句來創建:
<class><自定義異常名><extends><Exception>{...}