- 先創(chuàng)建一個(gè)自定義異常類 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("不能為負(fù)數(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ā)生了其他異常");
}
}
}
-
運(yùn)行結(jié)果:
image.png
在方法中使用throw關(guān)鍵字拋出異常后喇闸,方法不再繼續(xù)執(zhí)行
Error是在JVM運(yùn)行時(shí)出錯(cuò)的,程序員無(wú)法控制并改變询件;
Exception是程序員可控的燃乍,可以修改程序解決的異常Java允許忽略運(yùn)行時(shí)異常,編譯器會(huì)通過(guò)宛琅,但可根據(jù)情況進(jìn)行處理
其他異常編譯器會(huì)檢查出來(lái)刻蟹,并強(qiáng)制進(jìn)行異常處理。執(zhí)行一個(gè)catch方法后夯秃,就不再執(zhí)行后面的catch方法了座咆,
所以把所有異常的父類Exception放在最后一個(gè)catch中來(lái)捕捉異常痢艺。調(diào)用方法必須遵循任何可查異常的處理和聲明規(guī)則仓洼。若覆蓋一個(gè)方法,則不能聲明與覆蓋方法不同的異常堤舒。聲明的任何異常必須是被覆蓋方法所聲明異常的同類或子類色建。
[java] view plain copy
void method1() throws IOException{} //合法
//編譯錯(cuò)誤,必須捕獲或聲明拋出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){…}
}
//編譯錯(cuò)誤陵吸,必須捕獲或聲明拋出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ù)組索引越界異常壮虫。當(dāng)對(duì)數(shù)組的索引值為負(fù)數(shù)或大于等于數(shù)組大小時(shí)拋出澳厢。
2、java.lang.ArithmeticException 算術(shù)條件異常囚似。譬如:整數(shù)除零等剩拢。
3、java.lang.NullPointerException 空指針異常饶唤。當(dāng)應(yīng)用試圖在要求使用對(duì)象的地方使用了null時(shí)徐伐,拋出該異常。譬如:調(diào)用null對(duì)象的實(shí)例方法募狂、訪問(wèn)null對(duì)象的屬性办素、計(jì)算null對(duì)象的長(zhǎng)度、使用throw語(yǔ)句拋出null等等
4祸穷、java.lang.ClassNotFoundException 找不到類異常摸屠。當(dāng)應(yīng)用試圖根據(jù)字符串形式的類名構(gòu)造類,而在遍歷CLASSPAH之后找不到對(duì)應(yīng)名稱的class文件時(shí)粱哼,拋出該異常季二。
5、java.lang.NegativeArraySizeException 數(shù)組長(zhǎng)度為負(fù)異常
6揭措、java.lang.ArrayStoreException 數(shù)組中包含不兼容的值拋出的異常
7胯舷、java.lang.SecurityException 安全性異常
8、java.lang.IllegalArgumentException 非法參數(shù)異常
2.IOException
IOException:操作輸入流和輸出流時(shí)可能出現(xiàn)的異常绊含。
EOFException 文件已結(jié)束異常
FileNotFoundException 文件未找到異常
3. 其他
ClassCastException 類型轉(zhuǎn)換異常類
ArrayStoreException 數(shù)組中包含不兼容的值拋出的異常
SQLException 操作數(shù)據(jù)庫(kù)異常類
NoSuchFieldException 字段未找到異常
NoSuchMethodException 方法未找到拋出的異常
NumberFormatException 字符串轉(zhuǎn)換為數(shù)字拋出的異常
StringIndexOutOfBoundsException 字符串索引超出范圍拋出的異常
IllegalAccessException 不允許訪問(wèn)某類異常
InstantiationException 當(dāng)應(yīng)用程序試圖使用Class類中的newInstance()方法創(chuàng)建一個(gè)類的實(shí)例桑嘶,而指定的類對(duì)象無(wú)法被實(shí)例化時(shí),拋出該異常