標籤:res test nal exce 閱讀 ring 系統 轉化 練習
1.請閱讀並運行AboutException.java樣本,然後通過後面的幾頁PPT瞭解Java中實現異常處理的基礎知識。
代碼執行時不發生異常。
jvm在處理浮點數時,產生的是ddiv位元組碼指令,i/0,0轉化為浮點數0.0,而0.0是double類型的,並不精確,所以不會拋出異常。
jvm在處理整數時,產生的是idiv位元組碼指令,整數除0就是除0,會拋出異常。
第一個程式沒有執行finally?
finally 必須與 try 或 try/catch 配合使用。因為並沒有執行try,所以不會執行finally,異常是由系統捕獲的,所以try並沒有拋出。除此之外,不能退出 try 而不執行其 finally 。如果 finally 存在,則它總會執行。(無論從那點看,這個陳述都是正確的。有一種方法可以退出 try 而不執行 finally 。如果代碼在 try 內部執行一條 System.exit(0); 語句,那麼應用程式終止而不會執行finally 執行。另一方面,如果您在 try 執行期間撥掉電源,finally 也不會執行。)
2.閱讀以下代碼(CatchWho.java),寫出程式運行結果:
3.寫出CatchWho2.java程式啟動並執行結果
4.辨析:finally語句塊一定會執行嗎?
請通過 SystemExitAndFinally.java樣本程式回答上述問題
此程式中finally並未執行,原因是catch語句中的 System.exit(0);使得程式退出jvm了,所以finally也就不執行了。
總結try catch finally嵌套使用執行順序。
1)try語句嵌套從外層到內層執行,在try語句中,哪一層出錯,哪一層就拋出異常,後邊的try語句就不再執行,如果該層存在catch就進行相應的捕獲,有該層的finally也執行,除非finally遇到不執行的情況;
2)如果該層沒有catch進行捕獲,就向外拋出,去找catch,如果沒有catch進行捕獲,就終止程式。
5.請先閱讀 EmbedFinally.java樣本,再運行它,觀察其輸出並進行總結。
1)try拋出一個異常之後,程式會跳出try,不再執行try後邊的語句,開始對catch進行匹配,處理異常;
2)try嵌套中,拋出的異常只有被處理才可以按順序拋出下一個異常,如果不處理,程式就終止;
3)try拋出異常之後,就跳出了try語句,內層catch無法捕獲就繼續向外拋,所以外層也就有異常,外層語句不執行,第二個程式 throw new ArithmeticExcepption沒有執行。
4)第三個程式,try第一層第二層沒有異常不用捕獲,執行完之後到第三層,除0有異常,catch捕獲,執行第三層的finally然後,順序執行第二層,第一層的finally。
6.編寫一個程式,此程式在運行時要求使用者輸入一個 整數,代表某門課的考試成績,程式接著給出“不及格”、“及格”、“中”、“良”、“優”的結論。
要求程式必須具備足夠的健壯性,不管使用者輸入什 麼樣的內容,都不會崩潰。
原始碼:
import java.util.Scanner;
class cepingcuowuException extends Exception{
public cepingcuowuException(String s){
super(s);
}
}
class fenshu{
int score;
public void panduan(int score){
score=score;
if(score<60)
{
System.out.println("不及格!");
}
if(score>=60){
{
System.out.println("及格!");
if(score<=70)
System.out.print("中");
else if(score<80 && score>=70)
System.out.print("良");
else if(score>=80)
System.out.print("優");
}
}
}
}
public class Test {
public static void main(String args[])throws cepingcuowuException{
fenshu fenshu = new fenshu();
System.out.println("請輸入測評成績:");
try{
Scanner in = new Scanner(System.in);
String b = in.next();
boolean result=b.matches("[0-9]+");
if(result==true)
{
int c=Integer.valueOf(b);
if(c > 100||c < 0)
throw new cepingcuowuException("輸入範圍不正確!");
else
fenshu.panduan(c);
}
if(result == false)
throw new cepingcuowuException("輸入格式錯誤!");
}
catch(cepingcuowuException e){
System.out.println(e);
}
}
}
程式:
java課堂練習——異常