Javaにおける例外処理について、普段特に考えることもなく
「とにかく例外が発生しうるコードはtry{}内に書いて、発生した場合の処理はcatch{}に書く!」
という認識で行っていました。
throwsというものも知ってはいるものの、try{}catch{}で良いのでは?と思ってしまいます。
ただ、本来他から呼び出されるメソッドであればthrowsを使い、単体で動くメソッドはtry{}catch{}を
使うべきなのかな?という疑問もあります。
そもそも例外処理についての認識が合っているかや、try{}catch{}とthrowsの使い分けの考え方が合っているか教えていただきたいです!
#【追記】
分かりにくい質問文ですが、聞きたい事、疑問に思っている事は
『例外はすべてtry{}catch{}で処理できるのにthrowsを使う場面はあるのか?』
『一種の条件分岐のように使用してよいものなのか?』
ということです。
例えば入力チェックを行う際、以下のようにStringからintへ変換する場合には
入力された値が数値であればエラーは発生しませんが、文字列などであれば型変換の
エラーが発生します。
//呼び出し元クラス public class Text { public void inputText () { /* * inputstreamなどを使用し、ユーザーに文字や数字などを入力させる */ String str = "入力された値"; boolean isNumFlag = util.isNum(str); //例外が発生しうる部分 if (isNumFlag == true) { system.out.println("入力された値は数字です"); } else { system.out.println("入力された値は数字ではありません"); } } } //呼び出されるクラス、メソッド public class util { public static boolean isNum (String str) { int Num = Integer.parseInt(str); //例外が発生しうる部分 } }
この場合だと、呼び出されるメソッドについてはthrowsで例外を投げて、そのうえで呼び出し元クラスでtry{}catch{}で動作を分岐させれば良いと考えています。
ただその場合だとif文は使用せず、実質try{}catch{}が条件分岐のような扱いになるのが気になる所です。こういう使い方をしても問題がない、むしろこう使うべきものであるなら今のやり方で安心ができますが。
//呼び出し元クラス public class Text { public void inputText () { /* * inputstreamなどを使用し、ユーザーに文字や数字などを入力させる */ String str = "入力された値"; try { boolean isNumFlag = util.isNum(str); //例外が発生しうる部分 system.out.println("入力された値は数字です"); } catch(〇〇Exception e) { system.out.println("入力された値は数字ではありません"); } } //呼び出されるクラス、メソッド public class util { public static boolean isNum (String str) throws 〇〇Exception { int Num = Integer.parseInt(str); //例外が発生しうる部分 return true; } }
個人的には呼び出し元のクラスはできるだけごちゃごちゃさせたくない、深いネストになる可能性があるコードは
書きたくないという気持ちがあるので
//呼び出し元クラス public class Text { public void inputText () { /* * inputstreamなどを使用し、ユーザーに文字や数字などを入力させる */ String str = "入力された値"; boolean isNumFlag = util.isNum(str); //例外が発生しうる部分 if (isNumFlag == true) { system.out.println("入力された値は数字です"); } else { system.out.println("入力された値は数字ではありません"); } } } //呼び出されるクラス、メソッド public class util { public static boolean isNum (String str) { try { int Num = Integer.parseInt(str); //例外が発生しうる部分 return true; } catch (〇〇Exception e) { return false; } }
このような書き方の方が好きなのですが、好みの問題なのですかね?
回答1件
あなたの回答
tips
プレビュー