Javaの例外処理が分からん
omochistが,Javaで例外処理の勉強をしていますが,どうもつまずいた模様です.親切な人は,教えてくれると嬉しいので,是非コメントをお願いします.
昨日書いた,JSPのソースの,
if(p2 == 0){ out.println("割る数がおかしいYO."); } else { float s = (float)p1 / (float)p2; out.println(p1 + "/" + p2 + "=" + s); }
の部分で,Javaに詳しい友達に,例外を受け取って処理したら?と言われたので,ちょっとwebでJavaの例外を学び,実際に「あくまでも文法に忠実に」やってみた.
try { float s = (float)p1 / (float)p2; // 予定では,ココで例外がスローされる. out.println(p1 + "/" + p2 + "=" + s); } catch (ArithmeticException e) { out.println("割る数がおかしいYO"); }
まぁこんな感じで動くだろう.と思いながら,実行して見ると,
3/0=Infinity
と,なんとも「ごもっとも」な答えが返ってきた.
おっかし〜な〜と思いながら,webで例外を吐かれてた,intにしてみる.
try { int s = p1 / p2; // 予定では,ココで例外がスローされる. out.println(p1 + "/" + p2 + "=" + s); } catch (ArithmeticException e) { out.println("割る数がおかしいYO"); }
としてみると,ちゃんとArithmeticExceptionで例外が飛んでいた.なんと,intなら飛んでfloatなら飛ばないんですか.
いっそ,例外とかどっかに放ってみる.
float s = (float)p1 / (float)p2;
としてみると,
3/0=Infinity
あぁ,そうですか.結局,floatだと0で割っても例外が吐かれないのね.不思議だ.