突如其來的"中斷異常",我(Java)該如何處理?






# **一、何為異常?**





## 1.生活中的實例

生活中存在許多不正常:
上班路上自行車掉鏈子
上廁所手機掉馬桶
下班回家鑰匙丟失
。。。。。。。

2.程序中的實例

我們的代碼中也許存在許多紕漏,導致用戶使用時程序突然停止工作,例如下面簡單的Java代碼完成一個加法器:

import java.util.Scanner;

public class Count {
    public static void main (String []args){
	 int a , b;
	 Scanner read = new Scanner(System.in);

	 System.out.print("請輸入a:");
	 a = read.nextInt();

	 System.out.print("請輸入b:");
	 b = read.nextInt();

	 System.out.println("a+b="+(a+b));
   }
}

看看輸入數據會不會出現異常:

  • 當輸入100和200時,運行正常:
- 當輸入100和a時,運行報錯: ![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015111817031-2118418317.png)
這就是Java中的異常,輸入不合法,程序無法繼續運行被迫終止,流程圖如下:
圖片名稱

3.異常的概念

異常:異常指的是在程序運行過程中發生的異常事件,通常是由硬件問題或者程序設計問題所導致的。在Java等面向對象的編程語言中異常屬於對象(Java語言中異常分為運行時異常(Exception)和編譯型異常(Error))





二、Java中異常處理機制







## 1.Java異常處理機制的概念

Java異常處理機制就是程序代碼執行過程中出現異常后,會按照我們預先制定的處理方法對異常進行處理,異常處理完成后程序會繼續運行下去。

dfa

2.關鍵字trythrowthrowscatchfinally

try: 嘗試執行被此關鍵字作用的代碼塊A,若出現異常則忽略代碼塊A中剩下的代碼。
throws: 聲明方法中將拋出的異常,通常在方法名后出現。
throw: 手動拋出異常。
catch: 捕獲處理異常。
finally:不論出現不出現異常都要此塊代碼都要執行。

![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015115119312-1087816146.png)

3.try-catch

try語句塊中代碼執行時發生三種情況:

  • try語句塊中代碼正常執行完畢,沒有任何異常,那么catch語句塊的代碼將不會被執行。
import java.util.*;
public class Count {
 	    public static void main (String []args){
	        int a , b;
	        Scanner read = new Scanner(System.in);
	        try{
		        System.out.print("請輸入a:");
		        a = read.nextInt();
		        System.out.print("請輸入b:");
		        b = read.nextInt();
		        System.out.println("a+b="+(a+b));
	        }catch(InputMismatchException ex){
		        System.out.println("不可以,請輸數字!");
                }
                System.out.println("<<<<歡迎使用!>>>>");
	    }
}

輸入100和200后程序順利進行!

  • try語句塊中代碼執行過程中產生異常,並且該異常跟catch中聲明的異常類型相符合,那么try語句塊中剩余的代碼將被忽略,catch語句塊的代碼將被執行。
    還是上面代碼,輸入100和a后程序運行如下:
- **try**語句塊中代碼執行過程中產生異常,但是拋出的異常並沒有在**catch**語句塊中聲明,那么這個時候程序會立刻終止。

4.try-catch-finally

catch子句后加入finally塊,可以確保無論是否發生異常,finally塊中的代碼總能被執行。

  • 代碼示例:
import java.util.*;

public class Count {
	 public static void main (String []args){
		int a , b;
		Scanner read = new Scanner(System.in);
		try{
			System.out.print("請輸入a:");
			a = read.nextInt();
			System.out.print("請輸入b:");
			b = read.nextInt();
			System.out.println("a+b="+(a+b));
		}catch(Exception ex){
			System.out.println("不可以,請輸數字!");

		}finally{
		System.out.println("<<<<歡迎使用!>>>>");
		}
	 }
}
  • 運行結果:

5.多重catch

  • 一段代碼可能會產生多個異常。
  • 依次對每個catch塊聲明的異常對象進行檢查,找到執行第一個與try拋出的異常類型匹配的catch塊,之后的catch塊將被忽略。
  • 異常子類一定要位於異常父類之前,如下圖:
sdfas


posted @ 2016-10-15 12:43  CN_Simo  閱讀( 1671)  評論( 0編輯  收藏


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM