Exception オブジェクト
ひとつのコード片が複数の例外を投げることは珍しくありません。この状況に対処する方法のひとつは、すべての例外を try-catch で受け取り、Exception オブジェクトを使って何が起きたかを特定し、デバッグのために Exception から情報を出力することです。
ここでは、SplitTheBill アプリケーションを再度修正し、汎用的な Exception を catch して、問題の原因を把握するために Exception オブジェクトのデータを使います。Exception オブジェクトには、問題に至るメソッドの経路(トレース)を含む、多くの有用な情報が入っています。
この演習はコースの一部です
Javaにおけるデータ型と例外処理
演習の手順
- catch ブロックで、
catch (Exception e)を使ってあらゆるExceptionを捕捉します。 - catch ブロック内で、
Exceptionの参照(e)とgetClass()メソッドを使い、捕捉した例外の型(クラス)を表示します。 Exceptionの参照(e)とgetMessage()メソッドを使って、例外メッセージを出力します。Exceptionの参照(e)とprintStackTrace()メソッドを使って、出力ストリームに「スタックトレース」を表示します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
class SplitTheBill {
public static void main(String[] args) {
BigDecimal bill = new BigDecimal(125.50);
computeEachBill(bill, 5);
computeEachBill(bill, 0);
}
public static void computeEachBill(BigDecimal bill, int people) {
try {
BigDecimal numPeople = new BigDecimal(people);
BigDecimal individualBill = bill.divide(numPeople);
System.out.println("Bill for each person is: " + individualBill);
// Catch any exception
} catch (____ ____) {
System.out.println("You didn't provide a positive number of people to split the bill among.");
// Print the type (class) of exception
System.out.println("Type of exception: " + ____.____());
// Print the exception message
System.out.println(____.____());
// Print the stack trace
____.____();
}
}
}