Javaを勉強している者です。
タイトルの通り、Java言語の例外処理で使われるthrowとthrowsの違いが
よく分かりません。
どのような場合にthrowを使い、どのような場合にthrowsを使うのでしょうか。
調べてみたのですがよく理解できませんでした。
お教え頂ければ幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
throw: メソッドの中で、例外を投げる命令キーワード
java
1public void method() { 2 try { 3 // 例外を"投げろ" 4 throw new Exception(); 5 } catch (Exception e) { 6 e.printStackTrace(); 7 } 8}
throws: メソッドの宣言で、この例外を投げる可能性があるという宣言
Java
1//英語として解釈するなら、throwsの前の関係代名詞whichが省略されているとみて、 2//Exceptionを"投げる"method 3public void method() throws Exception { 4 throw new Exception(); 5}
throws宣言によりcatchすべき検査例外が呼び出し側からわかるため、そのようなメソッドはtry-catchで囲まなければコンパイルエラーになる
投稿2017/03/28 02:11
編集2017/03/28 14:57総合スコア20675
0
throwsは メソッド宣言の後ろにつけて、throwsのさらに後ろに書いた例外がメソッド内部で出た場合例外エラーをメソッドの呼び出し元に送りそこで処理するためのものです
throw は、メソッド内部等で恣意的に例外を投げたい場合に
throw new 例外の型();
で例外を発生させられるしくみです
下ではdoITメソッドにthrows Exceptionをつけているため、メソッド内部のthrowで発生させられたExceptionをメソッド内部でtry-cathブロックに入れて例外処理しなくとも、メソッド呼び出し元で呼び出したメソッド部をtry-catchブロックで囲んで処理する事でコンパイルできています。
一方、doitdoitメソッドにはthrows Exceptionがついていないため、メソッド内部のthrowで発生させられたExceptionをメソッド内部でtry-cathブロックに入れて例外処理しなければエラーが出てコンパイルできません
java
1class AC6{ 2 3public static void main(String[] args){ 4 5try{ 6doIT(); 7}catch(Exception e){ 8} 9 10 11doitdoit(); 12 13 14} 15 16static void doIT() throws Exception{ 17 18throw new Exception(); 19 20} 21 22static void doitdoit(){ 23 24try{ 25throw new Exception(); 26}catch(Exception e){ 27} 28 29 30} 31 32 33 34}
投稿2017/03/28 02:18

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
非常にざっくり説明すると、記述する位置が異なります。
ですので、役割は明確に違います。
#throw
throwはメソッド内で、意図的にExceptionを発行し、
投げるために使用します。
ですので、記述できるのはメソッド内になります。
Java
1Java 2 3public static void main(String[] args) { 4 throw new RunTimeException(“意図的にExceptionを発行しました”); 5} 6
#throws
throwsはメソッド内で発生したExceptionを自信のメソッド内でcatchするのではなく、呼ばれる側に例外を投げるために使用します。
ですので、記述できるのはメソッドの引数の横になります。
Java
1 2public void test() throws Exception { 3 4} 5
複数もいけます。
Java
1 2public void test() throws IOException, SQLException { 3 4} 5
#まとめ
メソッド内では、一つのExceptionしか投げることはできないので、throw
メソッドは複数のExceptionを投げることができるので、throws
そういう風に覚えました。
投稿2017/03/28 02:18
総合スコア70
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
throws は「このメソッドはこんな例外を発生させて(呼び出し元に)返しますよ」という宣言です。
呼び出し元はこの情報を元に、try-catch するべき例外を(コンパイル時に)チェックできます。
呼び出し元が try-catch しなかった場合、さらに上位の呼び出し元に例外が伝播していきます。
※最終的に誰も try-catch しなければ、Java Runtime が例外を処理してエラーメッセージを出して終了します
throw は「ここで例外を発生させる」メソッドです。
投稿2017/03/28 02:11
総合スコア13707
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。