java 例外処理について
ぱるさん
(No.1)
---------------------------------------------------------------------------------
public class Sample {
public static void main(String[] args) {
int [] month = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
try{
System.out.println(month[12]);
}catch(NumberFormatException e){
System.out.println("Error");
}
}
}
---------------------------------------------------------------------------------
このソースコードを実行すると、「Error」と出力されないのですが、なぜですか。
例えば「System.out.println(month[12]);」の部分を、「int i=Integer.parseInt("a");」に変えると予想通り「Error」を出力するんですが、違いは何なのでしょうか。
public class Sample {
public static void main(String[] args) {
int [] month = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
try{
System.out.println(month[12]);
}catch(NumberFormatException e){
System.out.println("Error");
}
}
}
---------------------------------------------------------------------------------
このソースコードを実行すると、「Error」と出力されないのですが、なぜですか。
例えば「System.out.println(month[12]);」の部分を、「int i=Integer.parseInt("a");」に変えると予想通り「Error」を出力するんですが、違いは何なのでしょうか。
2021.08.14 16:52
詳しくはありませんがさん
(No.2)
NumberFormatExceptionしかキャッチしていないからではないでしょか?
配列の範囲外に参照の際は別のExceptionが出るのではなかったでしょうか?
NumberFormatExceptionを調べると
「文字列を数値型に変換しようとしたとき、文字列の形式が正しくない場合に発生」とあります。
配列の範囲外に参照の際は別のExceptionが出るのではなかったでしょうか?
NumberFormatExceptionを調べると
「文字列を数値型に変換しようとしたとき、文字列の形式が正しくない場合に発生」とあります。
2021.08.14 17:54
ぱるさん
(No.3)
ああ、そうなんですね。
これって「NumberFormatException」を「Exception」にしたら、正しくない文字列から数値型への変換に限らずどんな例外でもキャッチするようになるのでしょうか。
これって「NumberFormatException」を「Exception」にしたら、正しくない文字列から数値型への変換に限らずどんな例外でもキャッチするようになるのでしょうか。
2021.08.14 18:26
GinSanaさん
★FE シルバーマイスター
(No.4)
配列の範囲外のやつはArrayIndexOutOfBoundsExceptionです。
で、上位のExceptionとか
が、リアルプログラミングでやるとすごい嫌われます。
それは、拾って対処すべきものだけ対処しろよという原則を崩してなんでもかんでも拾ってくるからですな。
例外処理は必要最低限の範囲で意図したものだけCatchする、というのが正しい作法です。
で、上位のExceptionとか
catch (Throwable e) {
にすればたしかになんでも拾います。が、リアルプログラミングでやるとすごい嫌われます。
それは、拾って対処すべきものだけ対処しろよという原則を崩してなんでもかんでも拾ってくるからですな。
例外処理は必要最低限の範囲で意図したものだけCatchする、というのが正しい作法です。
2021.08.14 19:19
ぱるさん
(No.5)
なるほど。悩んでたところだったので凄くためになりました。
詳しく教えていただきありがとうございました。
詳しく教えていただきありがとうございました。
2021.08.14 21:04
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告