try cath finally 塊
try{
System.out.println(divisor / dividend);//ArithmeticException 算數(shù)異常
}catch (Exception e){
e.printStackTrace();
System.out.println("捕獲到一個異常");
}finally {
System.out.println("不管怎
樣都會執(zhí)行這個代碼");
}
1:如果try塊所有語言正常執(zhí)行完畢,不會發(fā)生異常,南無catch所有語句將被忽略
2:如果try塊執(zhí)行中遇到異常且這個異常與catch異常類型匹配,那么try其余代碼將被忽略catch塊會被執(zhí)行
3:如果try語句在執(zhí)行中遇到異常,而拋出異常沒有在catch中聲明,程序會立刻退出
拋出異常throws和throw
package edu.xcdq;
/**
* @qvthor liuwenzheng
* @date 2021/4/27 15:31
*/
public class Demo03 {
public static void main(String[] args) throws Exception{ //繼續(xù)向上聲明,不處理
/*try {
steSex("雙性人");
}catch (Exception e){
e.printStackTrace();
System.out.println("非男非女");
}*/
steSex("afwarf");
}
public static void steSex(String sex) throws Exception{ //聲明異常
if (!(sex.equals("男")|| sex.equals("女"))){
throw new Exception("處理不了的異常,扔出去"); //拋出異常
}
}
}
throw和throws區(qū)別
1作用不同:throw用于在程序中拋出異常;throw用于聲明在該方法內(nèi)拋出異常
2使用位置不同:throw位于方法內(nèi)部可以做反復(fù)語句使用;throws必須跟在方法參數(shù)后面,不能單獨使用
3內(nèi)容不同:throw拋出一個異常對象,而且只能是一個,throws后面跟異常類,而且可以跟多個異常類
自定義異常
package edu.xcdq;
/**
* @qvthor liuwenzheng
* @date 2021/4/27 15:46
*/
public class Demo04 {
public static void main(String[] args){
try {
steSex("雙性人");
}catch (Exception e){
System.out.println("調(diào)用者說處理過了");
}
}
public static void steSex(String sex) throws SexException{ //聲明異常
if (!(sex.equals("男")|| sex.equals("女"))){
throw new SexException("發(fā)現(xiàn)一個不對勁的"); //拋出異常
}
}
}
package edu.xcdq;
/**
* @qvthor liuwenzheng
* @date 2021/4/27 15:44
*/
public class SexException extends Exception {
public SexException(){
}
public SexException(String message){
System.out.println(message);
System.out.println("自定義的異常,知道非男飛女,但是沒辦法處理");
System.out.println("..........");
}
}
注意
1:自定義異常類一般是以Exception結(jié)尾
2:自定義異常類,必須繼承Exception或RuntimeException
2.1:繼承Exception,那么自定義的異常類就是一個編譯期異常,如果方法內(nèi)部拋出了編譯期異常,就不許處理這個異常,要么throws,要么try···caych
2.2:繼承RuntimeException,那么自定義的異常類就是一個運行期異常,無需處理,交給虛擬機處理