天天看點

學習-Java異常處理之try-catch之異常捕獲

第1關:學習-Java異常處理之try-catch之異常捕獲

  • 任務描述
  • 相關知識
    • 什麼是異常
    • 非運作時異常
    • 運作時異常
    • 錯誤
    • 捕獲異常
    • 異常的使用原則
  • 程式設計要求
  • 測試說明

任務描述

本關任務:求給定兩個數的商,并捕獲除數為 0 的異常。

相關知識

為了完成本關任務,你需要掌握: 1.什麼是異常; 2.如何捕獲異常; 3.異常的使用原則。

什麼是異常

異常:程式在運作過程中産生的不正常情況。

程式在運作的時候,發生了一些預期之外的事件,進而沒有按照我們編寫的代碼執行,這就是異常。

異常是 Java 中的錯誤,但是并不是所有的錯誤都是異常,比如說,你在定義變量名的時候沒有依照 Java 的規則,在語句的結尾少了一個分号,那麼運作出來結果是錯誤:

java.lang.Error

異常的原因有很多種,比如:

  1. 輸入了錯誤的資料,比如:程式需要的是 int 類型資料,而使用者輸入了一串字元串;
  2. 對象沒有初始化就調用,下面這段代碼就會提示空指針異常。
  1. String str = null;

  2. int length = str.length();

要了解 Java 中的異常是如何工作的,你需要掌握以下三種類型的異常:

  1. 非運作時異常;
  2. 運作時異常;
  3. 錯誤。

非運作時異常

非運作時異常也稱檢查型異常,如下圖 1 所示,當我們要打開一個檔案時,這段代碼就可能存在異常,因為這個檔案很有可能并不存在,是以在 IDE(程式設計軟體) 中就會有紅波浪線報錯。這種異常程式員是必須要處理的。

學習-Java異常處理之try-catch之異常捕獲

圖1

運作時異常

運作時才有可能會出現的異常,該類型異常程式員可以不去處理,當異常出現時,虛拟機會處理。常見的運作時異常有空指針異常。

錯誤

錯誤不是異常,而是脫離程式員控制的問題。錯誤在代碼中通常被忽略。例如,當棧溢出時,一個錯誤就發生了,它們在編譯也檢查不到的。

捕獲異常

如圖 1 所示,非運作時異常是需要我們提前處理的,那麼如何處理呢?

Java 中提供了一個捕獲異常的機制:try-catch,如下所示:

  1. try{

  2. 代碼 A

  3. 代碼 B

  4. }

  5. catch(Exception e){

  6. 異常處理代碼

  7. }

  8. 代碼 C

通過這兩個單詞的字面意思我們就能很好的了解了: try:嘗試;catch:捕獲。 嘗試執行代碼 A 和代碼 B,如果這兩段代碼有一個出現了異常,就會執行 catch 中的語句,如果代碼A、B 都不存在異常就不會執行 catch 代碼,最後繼續執行代碼 C。其中 catch 後面括号中寫的是異常的類型,Exception 可以代表所有異常,但是随着後面學習的深入,這裡的異常類型最好寫具體,比如 FileNotFoundException(檔案未找到異常)。

是以之前報錯的代碼我們這樣寫就沒錯啦:

  1. public static void main(String[] args) {

  2. try {

  3. File file = new File("D://abc.c");

  4. FileInputStream fileInputStream = new FileInputStream(file);

  5. }

  6. catch (Exception e){

  7. System.out.println("檔案D://abc.c不存在");

  8. }

  9. System.out.println("代碼c部分");

  10. }

在以上代碼中,我們使用 try-catch 語句捕獲了異常,是以程式就不會報錯了。

異常的使用原則

異常使用的原則主要有三個:

具體明确:指抛出的異常應能通過異常類名和 message 準确說明異常的類型和産生異常的原因; 提早抛出:指應盡可能早的發現并抛出異常,便于精确定位問題; 延遲捕獲:指異常的捕獲和處理應盡可能延遲,讓掌握更多資訊的作用域來處理異常。

程式設計要求

仔細閱讀右側編輯區内給出的代碼架構及注釋,在 Begin-End 間編寫程式代碼,求給定兩個數的商,并捕獲除數為 0 的異常,具體要求如下:

  • 接收給定的資料(如:42 2。其中第一個數為被除數,第二個為除數);
  • 求兩個數的商,并捕獲除數為 0 的異常,捕獲到該異常後輸出提示語句:“除數不能為0” 。

測試說明

平台将使用測試集運作你編寫的程式代碼,若全部的運作結果正确,則通關。可在右側 “測試結果”區檢視具體的測試集詳情。

測試輸入:

  1. 5 2

預期輸出:

  1. 2

測試輸入:

  1. 4 0

預期輸出:

  1. 除數不能為0

開始你的任務吧,祝你成功!

import java.util.Scanner;

public class ExcTest {
    public static void main(String[] args) {
        // 請在Begin-End間編寫代碼
        /********** Begin **********/
        // 第一步:接收給定的整數
       Scanner x=new Scanner(System.in);
       int a=x.nextInt();
       int b=x.nextInt();
        // 第二步:求給定兩個數的商,并捕獲除數為0的異常
     try{
         int q=a/b;
        System.out.print(q);
        /********** End **********/

    }
    catch(Exception e)
    {
        System.out.print("除數不能為0");
       
    }
}}