質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

15804閲覧

(Java)throwとthrowsの違いについて

aiue

総合スコア36

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2017/03/28 02:01

Javaを勉強している者です。
タイトルの通り、Java言語の例外処理で使われるthrowとthrowsの違いが
よく分かりません。
どのような場合にthrowを使い、どのような場合にthrowsを使うのでしょうか。
調べてみたのですがよく理解できませんでした。
お教え頂ければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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

satouryou

総合スコア70

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2017/03/28 02:42

throwsのsは三単現だと思いますがね。
guest

0

throws は「このメソッドはこんな例外を発生させて(呼び出し元に)返しますよ」という宣言です。
呼び出し元はこの情報を元に、try-catch するべき例外を(コンパイル時に)チェックできます。
呼び出し元が try-catch しなかった場合、さらに上位の呼び出し元に例外が伝播していきます。
※最終的に誰も try-catch しなければ、Java Runtime が例外を処理してエラーメッセージを出して終了します

throw は「ここで例外を発生させる」メソッドです。

投稿2017/03/28 02:11

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問