1. 程式人生 > >throws和throw的區別以及應用,手動丟擲異常

throws和throw的區別以及應用,手動丟擲異常

首先看一下throws和throw的區別:

throws是用來宣告一個方法可能丟擲的所有異常資訊

throw則是指丟擲的一個具體的異常型別。

通常在一個方法(類)的宣告處通過throws宣告方法(類)可能丟擲的異常資訊,而在方法(類)內部通過throw宣告一個具體的異常資訊。

throws通常不用顯示的捕獲異常,可由系統自動將所有捕獲的異常資訊拋給上級方法;

throw則需要使用者自己捕獲相關的異常,而後在對其進行相關包裝,最後在將包裝後的異常資訊丟擲。 

 

 

使用Java內建的異常類可以描述在程式設計時出現的大部分異常情況。除此之外,使用者還可以自定義異常。使用者自定義異常類,只需繼承Exception類即可。

在程式中使用自定義異常類,大體可分為以下幾個步驟。

(1)建立自定義異常類。

(2)在方法中通過throw關鍵字丟擲異常物件。

(3)如果在當前丟擲異常的方法中處理異常,可以使用try-catch語句捕獲並處理;否則在方法的宣告處通過throws關鍵字指明要丟擲給方法呼叫者的異常,繼續進行下一步操作。

(4)在出現異常方法的呼叫者中捕獲並處理異常

例子程式:

 

package com.zcy.exception;

import java.util.*;

public class NewClass {
 //用throws宣告這個方法可能丟擲的所有異常資訊
 static int avg(int number1, int number2) throws MyException {
  if (number1 < 0 || number2 < 0) {
   //用throw丟擲一個具體的異常型別
   throw new MyException("不可以使用負數");
  }
  if (number1 > 100 || number2 > 100) {
   throw new MyException("數值太大了");
  }
  return (number1 + number2) / 2;
 }

 public static void main(String[] args) {
  System.out.println("求2個數的平均數!" + "請輸入兩個數,要求是都小於100的數:");
  Scanner in = new Scanner(System.in);
  int number1 = in.nextInt();
  int number2 = in.nextInt();
  try {
   int result = avg(number1, number2);
   System.out.println(result);
  } catch (MyException e) {
   System.out.println(e);
  }
  System.out.println("是否繼續執行。。。。");
  /*

輸出結果:
  求2個數的平均數!請輸入兩個數,要求是都小於100的數:
  200000
  1
  com.zcy.exception.MyException: 數值太大了
  是否繼續執行。。。。

*/
 }


/* 

public static void main(String[] args) throws MyException {
  System.out.println("求2個數的平均數!" + "請輸入兩個數,要求是都小於100的數:");
  Scanner in = new Scanner(System.in);
  int number1 = in.nextInt();
  int number2 = in.nextInt();
  int result = avg(number1, number2);
  System.out.println(result);
  System.out.println("是否繼續執行。。。。");
 }
 輸入結果:
 求2個數的平均數!請輸入兩個數,要求是都小於100的數:
 200000
 1
 Exception in thread "main" com.zcy.exception.MyException: 數值太大了
  at com.zcy.exception.NewClass.avg(NewClass.java:13)
  at com.zcy.exception.NewClass.main(NewClass.java:36)

*/
}

//自定義一個異常類
class MyException extends Exception {
 MyException(String ErrorMessage) {
  super(ErrorMessage);
 }
}

 

可以看出,當用try..catch捕獲後,程式是還是可以繼續往下執行的,而如果不適用的話,繼續就會中斷,丟擲異常資訊