- 先創(chuàng)建一個自定義異常類 CCException ,再添加搭配 BB 類里捕捉異常的處理中。
package z1;
//自定義異常
public class CCException extends Exception{
String message;
public CCException(String messageError){
message=messageError;
}
public String getMessage(){
return message;
}
}
package z1;
public class BB{
static int arr(int x,int y)throws CCException{
if(y<0)
{
throw new CCException("不能為負數(shù)");
}
return x/y;
}
public static void main(String[] args){
try{
int value=arr(12,-3);
System.out.println(value);
}catch(CCException e){
System.out.println(e.getMessage());//自定義異常
}catch(ArithmeticException e){
System.out.println("算術(shù)異常");
}catch(Exception e){
System.out.println("程序發(fā)生了其他異常");
}
}
}
-
運行結(jié)果:
image.png
在方法中使用throw關(guān)鍵字拋出異常后,方法不再繼續(xù)執(zhí)行
Error是在JVM運行時出錯的,程序員無法控制并改變;
Exception是程序員可控的,可以修改程序解決的異常Java允許忽略運行時異常,編譯器會通過,但可根據(jù)情況進行處理
其他異常編譯器會檢查出來,并強制進行異常處理。執(zhí)行一個catch方法后,就不再執(zhí)行后面的catch方法了,
所以把所有異常的父類Exception放在最后一個catch中來捕捉異常。調(diào)用方法必須遵循任何可查異常的處理和聲明規(guī)則。若覆蓋一個方法,則不能聲明與覆蓋方法不同的異常。聲明的任何異常必須是被覆蓋方法所聲明異常的同類或子類。
[java] view plain copy
void method1() throws IOException{} //合法
//編譯錯誤,必須捕獲或聲明拋出IOException
void method2(){
method1();
}
//合法,聲明拋出IOException
void method3()throws IOException {
method1();
}
//合法,聲明拋出Exception,IOException是Exception的子類
void method4()throws Exception {
method1();
}
//合法,捕獲IOException
void method5(){
try{
method1();
}catch(IOException e){…}
}
//編譯錯誤,必須捕獲或聲明拋出Exception
void method6(){
try{
method1();
}catch(IOException e){throw new Exception();}
}
//合法,聲明拋出Exception
void method7()throws Exception{
try{
method1();
}catch(IOException e){throw new Exception();}
}
Java異常類層次結(jié)構(gòu)圖

1. runtimeException子類:
1、 java.lang.ArrayIndexOutOfBoundsException 數(shù)組索引越界異常。當對數(shù)組的索引值為負數(shù)或大于等于數(shù)組大小時拋出。
2、java.lang.ArithmeticException 算術(shù)條件異常。譬如:整數(shù)除零等。
3、java.lang.NullPointerException 空指針異常。當應(yīng)用試圖在要求使用對象的地方使用了null時,拋出該異常。譬如:調(diào)用null對象的實例方法、訪問null對象的屬性、計算null對象的長度、使用throw語句拋出null等等
4、java.lang.ClassNotFoundException 找不到類異常。當應(yīng)用試圖根據(jù)字符串形式的類名構(gòu)造類,而在遍歷CLASSPAH之后找不到對應(yīng)名稱的class文件時,拋出該異常。
5、java.lang.NegativeArraySizeException 數(shù)組長度為負異常
6、java.lang.ArrayStoreException 數(shù)組中包含不兼容的值拋出的異常
7、java.lang.SecurityException 安全性異常
8、java.lang.IllegalArgumentException 非法參數(shù)異常
2.IOException
IOException:操作輸入流和輸出流時可能出現(xiàn)的異常。
EOFException 文件已結(jié)束異常
FileNotFoundException 文件未找到異常
3. 其他
ClassCastException 類型轉(zhuǎn)換異常類
ArrayStoreException 數(shù)組中包含不兼容的值拋出的異常
SQLException 操作數(shù)據(jù)庫異常類
NoSuchFieldException 字段未找到異常
NoSuchMethodException 方法未找到拋出的異常
NumberFormatException 字符串轉(zhuǎn)換為數(shù)字拋出的異常
StringIndexOutOfBoundsException 字符串索引超出范圍拋出的異常
IllegalAccessException 不允許訪問某類異常
InstantiationException 當應(yīng)用程序試圖使用Class類中的newInstance()方法創(chuàng)建一個類的實例,而指定的類對象無法被實例化時,拋出該異常
