異常!!!看看生活中的異常例子:
正常情況下,從家到公司上班,只需要20分鍾!但如果在路上碰到堵車或修路或車突然自燃等問題,那就沒辦法正常去上班了。其中堵車或修路或車突然自燃等問題就屬於異常。
碰到異常,就需要處理,不然就只能中斷上班了。
在Java程序中的異常表示什么意思呢?
Java中的錯誤分為兩類:錯誤(Error)和異常(Exception)
錯誤一般都是在編譯前IDE就能發現並提示,例如非要給整型變量賦一個超大的數值:
這就是一個典型的Error。
程序在運行時出現的問題,就叫異常!!!如果在編程時不考慮到對這些異常的處理,當出現異常時,程序就會停止。例如下面示例中的除0錯誤:
1
2
3
4
5
6
7
|
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就會提示有異常:
出現錯誤很好解決,在編碼環節改正確就OK了,但有的時候是否出現異常就不是開發者能控制的(如上例),所以開發者只能預判哪些地方有可能出現異常,提前做好處理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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);
}
|
結果:
可以發現結果中不再出現異常的信息,而且換成了我們自己的提示信息。
就跟下面兩個圖的區別一下,如果異常直接出現在用戶面前,用戶很有可能就再也不用你的程序了,而如果給個提示,則用戶有可能會繼續使用。
異常的概念就介紹完畢啦!!!,接下來看看Java中是如何處理異常的。
Java中的常見異常如下圖:
當然,這只列出了一部分,還有很多的異常已比較常見,當大家碰到時最好查一下JDK。
Java中異常的三種處理方式:
-
try-catch-finally
-
throw和throws
一、try-catch-finally
try部分是必須的,用來捕獲異常,一般把有可能出現異常的代碼放入其中。
catch部分可以有零到多個,是用來判斷異常類別並進行處理,一般把異常處理代碼放入其中。
finally部分可選,無論是否有異常都必須執行的代碼放入其中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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
這個關鍵字的作用是拋出異常,它不處理。
我叫小明給我帶份紅燒肉,小明去食堂發現沒有紅燒肉(這就相當於異常出現了),他不知道如何處理,就回到寢室告訴我沒有紅燒肉,然后我再來處理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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(
"你要吃的菜沒有了!"
);
}
}
}
|
編寫測試代碼:
不瞎的朋友應該發現有什么問題了吧?
是的,因為buyFood()方法后面我們加了throws Exception,所以在調用時IDE就認為這兒極有可能會有異常,我們就必須處理它,還是兩種方式,要么使用try-catch,要么在main方法后繼續拋異常(throws Exception)。
在Java中,除了使用JDK中定義好的異常外,我們還可以自定義異常,這個很簡單,定義一個類,繼承Exception類,重寫一個參數的構造方法就OK了。
好吧,異常到這兒就夠用了,需要深入了解的朋友,請自行百度吧,哈哈!
“軟件思維”博客地址:51CTO,博客園,感興趣的小伙伴可以去看相關的其它博文。