初心者だけどPerlが大好き

コードが世界を変える!

Javaの例外 ClassCastException

ClassCastException はクラスのキャストに失敗すると発生

catch (ClassCastException e) {
// もし実装していなければexceptionをスローします
throw new ClassCastException(



うーん。よくわかんない

Javaの例外
http://www.ne.jp/asahi/hishidama/home/tech/java/exception.html


だけど よく理解できるサイトを偶然発見

引用します


メソッドとクラス
http://oku.edu.mie-u.ac.jp/~okumura/java2/methods.html



メソッドを使うことを,メソッドを「呼び出す」ともいいます。 ここでは
int a = getInt("あなたは何歳ですか? ");

のように,"あなたは何歳ですか? " という文字列を引数としてメソッド getInt() を呼び出しています。 このメソッドは,キーボードからの入力を整数に直して,その値を返します。
メソッドが返す値のことを戻り値などといいます。

この getInt() メソッドの中では,キーボードから入力する部分がありますが,
ここでは入出力の例外(I/O Exception)が生じる可能性があります。
例外とは,いわゆるエラーのことです。
エラーが生じたときは,自前でエラー処理することもできますが,
エラー処理を他に任せてしまうこともできます。
このための宣言が throws IOException でした。

throws IOException は,このメソッドの中で入出力エラーが生じたなら,
それをそのまま呼び出し側に投げる(throw する)ことを意味します。
つまり, main メソッドから getInt メソッドを呼び出したとき,getInt メソッド内で生じた入出力エラーは main メソッドにそのまま投げられるので,
main メソッドもまた入出力エラーを投げる必要があります。
最後に入出力エラーを受け取ってエラーメッセージを発するのは,Javaインタープリタです。

エラーを投げないで,メソッド内で自前で処理してしまうことも可能です。
それには,次のようにします。

import java.io.*;
class Test {
static int getInt(String s) {
DataInputStream d = new DataInputStream(System.in);
// データ入力の準備
System.out.print(s); // メッセージ出力
System.out.flush(); // 強制出力
try { // トライする
return Integer.parseInt(d.readLine());
} catch (IOException e) { // 入出力の例外なら
System.err.println("I/O エラーです");
return 0; // 仮に 0 を返す
}
}
public static void main(String[] args) {
int a = getInt("あなたは何歳ですか? ");
int b = getInt("初恋は何歳でしたか? ");
System.out.println("あれから " + (a - b) + " 年たちましたね");
}
}

readLine() のような入出力メソッドを用いるときは,
必ず throws か catch を使わないと,コンパイラに叱られます。

throws でエラーを他に転嫁せず,catch でエラーを捕まえれば,
エラーの連鎖は断ち切れ,他でエラー処理する必要はなくなります。

実際には入出力エラーより,Integer.parseInt() メソッドで文字列が整数に変換できないというエラーが起きることのほうが多いと思います。 入出力エラーのように実際に入力装置にエラーが発生したときのエラーは絶対に throws か catch で処理しなければなりません