1. 程式人生 > >java動手動腦——異常處理

java動手動腦——異常處理

exceptio nds on() 提前 基本 捕獲 throw 異常處理 子類

Java07異常處理動手動腦

  1. 異常處理的基本知識

Java異常處理通過5個關鍵字try、catch、throw、throws、finally進行管理。基本過程是用try語句塊包住要監視的語句,如果在try語句塊內出現異常,則異常會被拋出,你的代碼在catch語句塊中可以捕獲到這個異常並做處理;還有以部分系統生成的異常在Java運行時自動拋出。你也可以通過throws關鍵字在方法上聲明該方法要拋出異常,然後在方法內部通過throw拋出異常對象。finally語句塊會在方法執行return之前執行,一般結構如下:
try{
程序代碼
}catch(異常類型1 異常的變量名1){
程序代碼
}catch(異常類型2 異常的變量名2){
程序代碼
}finally{
程序代碼
}

2. public class CatchWho {

public static void main(String[] args) {

try {

try {

throw new ArrayIndexOutOfBoundsException();

}

catch(ArrayIndexOutOfBoundsException e) {

System.out.println( "ArrayIndexOutOfBoundsException" + "/內層try-catch");

}

throw new ArithmeticException();

}

catch(ArithmeticException e) {

System.out.println("發生ArithmeticException");

}

catch(ArrayIndexOutOfBoundsException e) {

System.out.println( "ArrayIndexOutOfBoundsException" + "/外層try-catch");

}

}

}

運行結果:ArrayIndexOutOfBoundsException/內層try-catch

發生ArithmeticException

public class CatchWho2 {

public static void main(String[] args) {

try {

try {

throw new ArrayIndexOutOfBoundsException();

}

catch(ArithmeticException e) {

System.out.println( "ArrayIndexOutOfBoundsException" + "/內層try-catch");

}

throw new ArithmeticException();

}

catch(ArithmeticException e) {

System.out.println("發生ArithmeticException");

}

catch(ArrayIndexOutOfBoundsException e) {

System.out.println( "ArrayIndexOutOfBoundsException" + "/外層try-catch");

}

}

}

運行結果:ArrayIndexOutOfBoundsException/外層try-catch

3. 閱讀 EmbedFinally.java示例,再運行它,觀察其輸出並進行總結。

多個catch塊時候,Java虛擬機會匹配其中一個異常類或其子類,就執行這個catch塊,而不會再執行別的catch塊。finally語句在任何情況下都必須執行的代碼,這樣可以保證一些在任何情況下都必須執行代碼的可靠性。

4. finally語句塊一定會執行嗎?

並不一定,如果提前結束程序,finally語句就不會被執行,如程序中用System.exit(0);提前結束了程序。

5.編寫一個程序,此程序在運行時要求用戶輸入一個 整數,代表某門課的考試成績,程序接著給出“不及格”、“及格”、“中”、“良”、“優”的結論。

import java.util.*;

class AException extends Exception

{

String a;

AException()

{

a="輸入有誤";

}

public String toString()

{

return a;

}

}

public class A

{

public static void main(String args[])

{

while(1>0)

{

Scanner sc = new Scanner(System.in);

System.out.println("請輸入考試成績(0~100):");

try

{

String s = sc.nextLine();

getnum(s);

}

catch (AException e)

{

System.out.println(e.toString());

}

}

}

private static void getnum(String s) throws AException

{

for (int i = s.length()-1; i >= 0;i--)

{

int chr = s.charAt(i);

if (chr < 48 || chr > 57)

{

throw new AException();

}

}

double num = Double.parseDouble(s);

if (num < 0 || num> 100)

{

throw new AException();

}

if (num>= 0 && num<= 60)

{

System.out.print("不及格\n");

}

else if (num >= 60 && num <= 70)

{

System.out.print("及格\n");

}

else if (num>= 70 && num<= 80)

{

System.out.print("中\n");

}

else if (num >= 80 && num <= 90)

{

System.out.print("良\n");

}

else

{

System.out.print("優\n");

}

}

}

java動手動腦——異常處理