java動手動腦——異常處理
Java07異常處理動手動腦
- 異常處理的基本知識
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動手動腦——異常處理