一嘱丢、處理異常的目的
? ? ? ? 很多時候我們處理異常并不是為了修復(fù)程序的錯誤,而是就算程序出現(xiàn)了錯誤,也能夠讓程序繼續(xù)執(zhí)行?
二、jvm默認(rèn)處理異常的過程
?1.打印錯誤信息
? ? ? ? ? a.異常名稱祠饺,例如: java.lang.ArithmeticException
? ? ? ? ? b.異常的消息?/?by?zero
? ? ? ? ? c.異常所發(fā)生的方法位置?
? ? ? ? ? d.異常所在Java文件中?
? ? ? ? ? e.異常發(fā)生行號?
?2.終止程序?
? ? ? ? ? System.exit(0);
? JVM處理異常的方式不能夠滿足我們開發(fā)的需求,那么我們需要自己處理異常.
三越驻、處理異常的方式
?????方式一:?try...catch..finally
?????方式二: 在含有異常的方法上寫上:“throws+可能異常異常名”,可將異常問題拋給調(diào)用者來處理
方式一處理異常:
? ? ? 異常處理的格式:
try{
? ? ? ? ? ? ?//放置程序可能出現(xiàn)問題的代碼
}catch(異常類??異常名){
? ? ? ? ? ? //這里放置異常處理的代碼
}finally{
? ? ? ? ? ? //釋放資源
? ? ? ? }
??注意:
? ? ? ?1. try塊的代碼越少越好
? ? ? ?2. try塊中一旦發(fā)生異常,那么try塊中發(fā)生異常,后面所有的代碼都不會被執(zhí)行
? ? ? ?3. 多個catch塊只會執(zhí)行與之相匹配的一個
? ? ? ?4. 若使用Exception接收異常必須放在異常的最后面,滿足先子類后父類
四缀旁、異常的執(zhí)行流程
? ? ? ?1.程序執(zhí)行到錯誤行,系統(tǒng)會創(chuàng)建一個異常對象,并且拋給我們记劈,例如:
? ? ? ? ? ? ? ?ArithmeticException?exception =?new?ArithmeticException("/by?zero");
? ? ? ? ? ? ? ?throw?exception?;
? ? ? ?2.程序進入catch塊進行逐個匹配
? ? ? ? ???若匹配成功,程序執(zhí)行catch塊代碼(程序可繼續(xù)運行)
? ? ? ? ? ? ? ?ArithmeticException?ae?=?exception?;
? ? ? ? ? ? ? ?Exception?e?=?exception?;
若匹配失敗,則會交給jvm來處理(讓程序掛掉)
五、處理異常的標(biāo)準(zhǔn)方式
? ? ? 1.能夠顯示處理的盡量顯示處理,提高程序的可讀性
? ? ? 2.但是一定要在異常處理的最后加上父類Exception處理并巍,防止系統(tǒng)將異常交給虛擬機來處理
六目木、throw和throws的區(qū)別
? ? ? 1. throws出現(xiàn)在方法的聲明上,throw關(guān)鍵出現(xiàn)在方法內(nèi)
? ? ? 2. throws表示一種異常的可能性,throw表示程序的必然性
? ? ? 3. throws可以聲明多個異常類,throw只能夠拋出一個異常
? ? ? 4. throws聲明的是異常類,throw拋出的是異常對象
七、自定義一個異常類來處理異常
package ILikeJava;
import java.util.Scanner;
public class Test {
????????public static void main(String[] args) {
????????????????Scanner input = new Scanner(System.in);
????????????????System.out.println("請輸入分?jǐn)?shù)");
????????????????double score = input.nextDouble();
????????????????Teacher123 t = new Teacher123();????
????????????????try {
????????????????????????t.checkScore(score);? ? ? ?
????????????????????????System.out.println("合法分?jǐn)?shù)懊渡,輸入成功");
????????????????} catch (WrongInputException e) {
????????????????????????e.printStackTrace();
????????????????} catch (Exception e) {
????????????????????????e.printStackTrace();
????????????????} finally {
????????????????????????input.close();
????????????????}
????????}
}
class Teacher123 {
????????public boolean checkScore(double score) throws WrongInputException {
????????????????if (score > 100 || score < 0) {
????????????????????????throw new WrongInputException("分?jǐn)?shù)不合法刽射,需在0-100之間");
????????}
? ? ? ? ? return true;
????????}
}
class WrongInputException extends Exception {
????????private static final long serialVersionUID = 1L;
????????????????public WrongInputException() {
????????}
????????public WrongInputException(String message) {
????????????????super(message);
????????}
}