![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
例外処理ではthrowsかtry~catchを使いますよね。
で、ほとんどの場合はtry~catchを使うようで、ほとんどthrowsを使った例しかなく(まあ、throwsでの例外処理はプログラムが停止してしまうので推奨できないでしょうが)よくわから中区なってしまったので教えてほしいです
class Input{
int set(String Toi)throws IOException{
System.out.println(Toi);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int a = Integer.parseInt(str);
return a;
}
}
のようにInputクラスを用いて外部からこれを使うために
Input input = new Input();
x1 = input.set("x座標を入力");
とすると、「キャッチかスロー宣言をしろ」と怒られてしまいました。(コンパイルエラー)
この場合どうすればいいでしょうか?
No.1ベストアンサー
- 回答日時:
修正する必要のあるのは、Inputクラスのコードではありません。
それを呼び出しているコード、つまり
Input input = new Input();
x1 = input.set("x座標を入力");
の書かれているコードです。
対処方法はご存知のはずです。
> 例外処理ではthrowsかtry~catchを使いますよね。
すみません。
try~catchを使わなければいけないということですか?
Input input = new Input()throws IOException;
とためしにしてみたのですが・・・
だめでした。頓珍漢なことを言ってますでしょうか(;_;)
No.5
- 回答日時:
ざっと見たのですがthrowsの使い方を理解されていないようですね。
throwsとtry-catchの使い分けの方法を思い出してみてください。
try-catchはそのロジック内(クラス内のプログラム)で例外が発生した場合の処理方法を書きます。
これは例外は通知先を指定するようなコードを明確に書かない限りどこにも通知はされず、
その例外処理の中で処理されて終了します。
ですが、throwsはそのクラスを呼びだした元へ例外が発生したことを報告するためのものです。
つまり呼び出し元へその報告を受け取るための用意が必要となります。
その用意としてInputクラスを呼び出す場所でのtry-catchや
そのメソッドなどにthrows(さらに上位の呼び出し元へリレーで通知)が必要となります。
それを理解するとどうすればよいかがわかると思います。
参考URL:http://msugai.fc2web.com/java/
No.4
- 回答日時:
> つまるところ、try~catchでやるしかないですよね・・・?
・・・しかないかどうかは、質問に記述された内容からだけでは分かりません。
要するに以下のいずれかが必要だということです。
class Caller {
void methodB() throws IOException {
Input input = new Input();
}
}
class Caller {
void methodB() {
try {
Input input = new Input();
}
catch (IOException e) {
・・・
}
}
}
いずれにしろ、一番外側ではtry~catchを使うしかありませんが。
No.3
- 回答日時:
最初のエラーは外部から使う方のエラーじゃなかったですか?
Inputクラスのsetメソッドがエラーが発生した場合 IOExceptionが発生したら呼び出し側に戻るようになっているから、
呼び出す側に try - catch をしなければいけないと思います。
try{
Input input = new Input();
x1 = input.set("x座標を入力");
} catch(IOException e) {
}
みたいに。
No.2
- 回答日時:
> Input input = new Input()throws IOException;
> とためしにしてみたのですが・・・
あ、これはダメですね。
throws はメソッドの引数並びに続けて書きます。
azichanさん自身
> int set(String Toi)throws IOException
と正しく記述しているのにどうしたのかな。
このように記述しておけばset()内でIOExceptionが発生したら
外に投げてくれるわけです。
ただし、抽象メソッドの実装などで、勝手にthrowできない場合もあります。
そのような場合はtry~catchを使うしかありません。
なお、ステートメントの一種でthrowというのがあります。
これはそのExceptionを投げて、以降の処理を中断します。
Input input = new Input();
throw IOException;
と記述されていたら、Inputのインスタンスを作った後、
何もしないでExceptionを投げます。
この回答への補足
>throws はメソッドの引数並びに続けて書きます
うーん。引数ならび・・・・?
ごめんなさい。よくわからないです。
メソッド定義の段階の
int set(String Toi)throws IOException{
のことでしょうか・・・?
つまるところ、try~catchでやるしかないですよね・・・?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
VBA Evaluate関数 型が一致しま...
-
VB.Net Object型 空かどうか
-
【JAVA】与えられた金額を貨幣...
-
Bean→JSPでの文字化け
-
文字列からダブルクオートの削除
-
C# UriFormatExceptionの回避
-
Excelでのエラー
-
C#で例外が発生したとき、例外...
-
スタックオーバーフローとは?
-
サーブレットからIMGタグへ画像...
-
Timestamp型への変換について(J...
-
0除算の例外処理ができない!!...
-
VB.NETで16進数が正しいかどう...
-
java, c# 追加失敗時の処理
-
SQLException getNextException()
-
C#の捕捉されない例外処理の対...
-
タトゥーや墨を入れる人の共通点
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
VB.Net Object型 空かどうか
-
Timestamp型への変換について(J...
-
連続する「\\」をひとつの「\\...
-
VB.NETで16進数が正しいかどう...
-
全角スペースのチェックについて
-
C# マルチスレッドにおける例外...
-
文字列からダブルクオートの削除
-
VBA Evaluate関数 型が一致しま...
-
例外ってIf文の中に入れますか...
-
C#の捕捉されない例外処理の対...
-
時間の取得
-
【JAVA】与えられた金額を貨幣...
-
nullで、return出来るのはどん...
-
String型の日付(2005/11/25)の...
-
サーブレットからJSPの呼び出し...
-
0除算の例外処理ができない!!...
-
VBA 400エラー 1004エラー
-
文字列が数字のみで構成されて...
-
数字か文字列かを判定する関数
おすすめ情報