《Java從入門到放棄》JavaSE入門篇:異常

異常!!!看看生活中的異常例子:

wKiom1m4oQqxKdrbAAFGwKziKVg319.png

wKioL1m4oOLjWr47AAFsu0bBQpY688.png

正常情況下,從家到公司上班,只需要20分鐘!但如果在路上碰到堵車或修路或車突然自燃等問題,那就沒辦法正常去上班了。其中堵車或修路或車突然自燃等問題就屬於異常。

wKiom1m4o5-z165XAAF7me8U_-I750.png

碰到異常,就需要處理,不然就只能中斷上班了。


在Java程序中的異常表示什麼意思呢?

Java中的錯誤分爲兩類:錯誤(Error)和異常(Exception)

錯誤一般都是在編譯前IDE就能發現並提示,例如非要給整型變量賦一個超大的數值:

wKiom1m4pVzyXurKAAAobEQWUQQ110.png


這就是一個典型的Error。


程序在運行時出現的問題,就叫異常!!!如果在編程時不考慮到對這些異常的處理,當出現異常時,程序就會停止。例如下面示例中的除0錯誤:

public static void main(String[] args) {
	Scanner input = new Scanner(System.in);
	System.out.print("請輸入整數:");
	int i = input.nextInt();
	int sum = 10/i;
	System.out.println(sum);
}

這段代碼在編譯時是沒有任何問題的,但在運行時輸入0就會提示有異常:

wKioL1m4pwuidY2IAAA-PgWQvnA448.png


出現錯誤很好解決,在編碼環節改正確就OK了,但有的時候是否出現異常就不是開發者能控制的(如上例),所以開發者只能預判哪些地方有可能出現異常,提前做好處理。

public static void main(String[] args) {
	Scanner input = new Scanner(System.in);
	System.out.print("請輸入整數(不能輸入0):");
	int i = input.nextInt();
	int sum = 0;
	try {
		sum = 10/i;
	} catch (Exception e) {
		// TODO: handle exception
		System.out.println("不能輸入0,不能輸入0,不能輸入0!!!聽不懂國語麼!!!");
	}
	
	System.out.println(sum);
}

結果:

wKioL1m4p7rjSZnpAAAnjFGsyE4083.png


可以發現結果中不再出現異常的信息,而且換成了我們自己的提示信息。


就跟下面兩個圖的區別一下,如果異常直接出現在用戶面前,用戶很有可能就再也不用你的程序了,而如果給個提示,則用戶有可能會繼續使用。


wKiom1m4qLjC22vWAAB1TJVypJM826.jpg    wKiom1m4qLmAIaj9AACVLI00dqo347.jpg



異常的概念就介紹完畢啦!!!j_0019.gif,接下來看看Java中是如何處理異常的。

Java中的常見異常如下圖:

wKiom1m4qWfRiMv7AADDxzkspek720.png

當然,這隻列出了一部分,還有很多的異常已比較常見,當大家碰到時最好查一下JDK。


Java中異常的三種處理方式:

  1. try-catch-finally

  2. throw和throws


一、try-catch-finally

    try部分是必須的,用來捕獲異常,一般把有可能出現異常的代碼放入其中。

    catch部分可以有零到多個,是用來判斷異常類別並進行處理,一般把異常處理代碼放入其中。

    finally部分可選,無論是否有異常都必須執行的代碼放入其中。

int firstNum = 12;
int secondNum = 0;
try {
    int result = firstNum/secondNum;
    System.out.println("兩個數字相除的結果是:"+result)	   
}catch(ArithmeticException e) {
    System.out.println("算術異常:");
}catch(NumberFormatException e) {
    System.out.println("數字轉換異常");
}catch(ArrayIndexOutOfBoundsException e){
    System.out.println("數組下標越界異常");
}catch(Exception e) {
    System.out.println("其他異常");
}
finally{
    System.out.println("我是必須要執行滴,快叫爸爸!");
}


二、thorw和throws

    這個關鍵字的作用是拋出異常,它不處理。

    我叫小明給我帶份紅燒肉,小明去食堂發現沒有紅燒肉(這就相當於異常出現了),他不知道如何處理,就回到寢室告訴我沒有紅燒肉,然後我再來處理。

public class XiaoMing {
	//買食物的方法
	public void buyFood(String food) throws Exception{
		//用一個集合表示食堂的所有菜
		List<String> foods = new ArrayList<String>();
		foods.add("青椒雞蛋");
		foods.add("青椒肉絲");
		foods.add("紅燒排骨");
		foods.add("土豆歡聲");
		//表示是否有該食物的狀態
		int state = 0;	//默認沒有 0.沒有該食物 1.有該食物
		for (String string : foods) {
			if(food.equals(string)){
				state = 1;
				break;
			}
		}
		
		if(state==0){
	          throw new Exception("你要吃的菜沒有了!");
		}
	}
}

編寫測試代碼:

wKiom1m4rbCBvCWJAAAd58WvCrY080.png

    不瞎的朋友應該發現有什麼問題了吧?

    是的,因爲buyFood()方法後面我們加了throws Exception,所以在調用時IDE就認爲這兒極有可能會有異常,我們就必須處理它,還是兩種方式,要麼使用try-catch,要麼在main方法後繼續拋異常(throws Exception)。

wKiom1m4rkGC5Sc7AAA2sY4YOqQ796.png

在Java中,除了使用JDK中定義好的異常外,我們還可以自定義異常,這個很簡單,定義一個類,繼承Exception類,重寫一個參數的構造方法就OK了。



好吧,異常到這兒就夠用了,需要深入瞭解的朋友,請自行百度吧,哈哈!j_0028.gif


“軟件思維”博客地址:51CTO博客園,感興趣的小夥伴可以去看相關的其它博文。  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章