![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
例外処理では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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
ファイルダイアログを開いた時...
-
Timestamp型への変換について(J...
-
String型の日付(2005/11/25)の...
-
(Delphi) 例外の再生成について
-
0除算の例外処理ができない!!...
-
サーブレットからJSPの呼び出し...
-
C# マルチスレッドにおける例外...
-
連続する「\\」をひとつの「\\...
-
初回例外
-
VB.NETで16進数が正しいかどう...
-
文字列からダブルクオートの削除
-
C#の捕捉されない例外処理の対...
-
nullで、return出来るのはどん...
-
VC++におけるCStringの変換
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
C# インスタンスの破棄
-
エクセルVBA 画像を貼り付ける...
-
VB.NET getとsetの概念がわかり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
VB.NETで16進数が正しいかどう...
-
VB.Net Object型 空かどうか
-
Timestamp型への変換について(J...
-
C#の捕捉されない例外処理の対...
-
時間の取得
-
VBA Evaluate関数 型が一致しま...
-
C# UriFormatExceptionの回避
-
連続する「\\」をひとつの「\\...
-
文字列からダブルクオートの削除
-
String型の日付(2005/11/25)の...
-
タトゥーや墨を入れる人の共通点
-
VBA 400エラー 1004エラー
-
nullで、return出来るのはどん...
-
例外ってIf文の中に入れますか...
-
VC++におけるCStringの変換
-
【JAVA】与えられた金額を貨幣...
-
全角スペースのチェックについて
-
ファイルダイアログを開いた時...
-
C# マルチスレッドにおける例外...
おすすめ情報