teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

追記

2020/02/05 01:09

投稿

Dash_003
Dash_003

スコア27

title CHANGED
File without changes
body CHANGED
@@ -6,4 +6,114 @@
6
6
  ただ、本来他から呼び出されるメソッドであればthrowsを使い、単体で動くメソッドはtry{}catch{}を
7
7
  使うべきなのかな?という疑問もあります。
8
8
 
9
- そもそも例外処理についての認識が合っているかや、try{}catch{}とthrowsの使い分けの考え方が合っているか教えていただきたいです!
9
+ そもそも例外処理についての認識が合っているかや、try{}catch{}とthrowsの使い分けの考え方が合っているか教えていただきたいです!
10
+
11
+ #【追記】
12
+ 分かりにくい質問文ですが、聞きたい事、疑問に思っている事は
13
+ 『例外はすべてtry{}catch{}で処理できるのにthrowsを使う場面はあるのか?』
14
+ 『一種の条件分岐のように使用してよいものなのか?』
15
+ ということです。
16
+
17
+ 例えば入力チェックを行う際、以下のようにStringからintへ変換する場合には
18
+ 入力された値が数値であればエラーは発生しませんが、文字列などであれば型変換の
19
+ エラーが発生します。
20
+
21
+ ```ここに言語を入力
22
+ //呼び出し元クラス
23
+ public class Text {
24
+
25
+ public void inputText () {
26
+ /*
27
+ * inputstreamなどを使用し、ユーザーに文字や数字などを入力させる
28
+ */
29
+ String str = "入力された値";
30
+ boolean isNumFlag = util.isNum(str); //例外が発生しうる部分
31
+
32
+ if (isNumFlag == true) {
33
+ system.out.println("入力された値は数字です");
34
+ } else {
35
+ system.out.println("入力された値は数字ではありません");
36
+ }
37
+ }
38
+
39
+ }
40
+
41
+ //呼び出されるクラス、メソッド
42
+ public class util {
43
+
44
+ public static boolean isNum (String str) {
45
+ int Num = Integer.parseInt(str); //例外が発生しうる部分
46
+ }
47
+ }
48
+ ```
49
+
50
+ この場合だと、呼び出されるメソッドについてはthrowsで例外を投げて、そのうえで呼び出し元クラスでtry{}catch{}で動作を分岐させれば良いと考えています。
51
+ ただその場合だとif文は使用せず、実質try{}catch{}が条件分岐のような扱いになるのが気になる所です。こういう使い方をしても問題がない、むしろこう使うべきものであるなら今のやり方で安心ができますが。
52
+
53
+ ```ここに言語を入力
54
+ //呼び出し元クラス
55
+ public class Text {
56
+
57
+ public void inputText () {
58
+ /*
59
+ * inputstreamなどを使用し、ユーザーに文字や数字などを入力させる
60
+ */
61
+ String str = "入力された値";
62
+  try {
63
+ boolean isNumFlag = util.isNum(str); //例外が発生しうる部分
64
+
65
+ system.out.println("入力された値は数字です");
66
+
67
+  } catch(〇〇Exception e) {
68
+   system.out.println("入力された値は数字ではありません");
69
+  }
70
+ }
71
+
72
+ //呼び出されるクラス、メソッド
73
+ public class util {
74
+
75
+ public static boolean isNum (String str) throws 〇〇Exception {
76
+ int Num = Integer.parseInt(str); //例外が発生しうる部分
77
+  
78
+  return true;
79
+ }
80
+ }
81
+ ```
82
+
83
+ 個人的には呼び出し元のクラスはできるだけごちゃごちゃさせたくない、深いネストになる可能性があるコードは
84
+ 書きたくないという気持ちがあるので
85
+ ```ここに言語を入力
86
+ //呼び出し元クラス
87
+ public class Text {
88
+
89
+ public void inputText () {
90
+ /*
91
+ * inputstreamなどを使用し、ユーザーに文字や数字などを入力させる
92
+ */
93
+ String str = "入力された値";
94
+ boolean isNumFlag = util.isNum(str); //例外が発生しうる部分
95
+
96
+ if (isNumFlag == true) {
97
+ system.out.println("入力された値は数字です");
98
+ } else {
99
+ system.out.println("入力された値は数字ではありません");
100
+ }
101
+ }
102
+
103
+ }
104
+
105
+ //呼び出されるクラス、メソッド
106
+ public class util {
107
+
108
+ public static boolean isNum (String str) {
109
+
110
+ try {
111
+ int Num = Integer.parseInt(str); //例外が発生しうる部分
112
+ return true;
113
+
114
+ } catch (〇〇Exception e) {
115
+  return false;
116
+ }
117
+ }
118
+ ```
119
+ このような書き方の方が好きなのですが、好みの問題なのですかね?