10
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

try/catch か throws Exception か

Posted at

Javaで例外が起きうるコードを書いていると、あるIDEが try/catch をつけるか、thorws Exception をつけるかをサジェストしてきた.

それぞれが何を意味していて、いかに使い分ければ良いか.

サンプルコード

try/catch

.java
public void someMethod() {
	try {
		// do something which might fail.
	} catch (Exception e) {
		// handle the failure.
	}
}

throws Exception

.java
public void someMethod() throws Exception {
	// do something which might fail.
}

ハンドルするか/エラーを投げるか

2つの方法には大きな違いがある.

try/catch: エラーを飲み込む.

catch内部でrethorwしないとすると、メソッドのtry内部でエラーが発生したとしても、呼び出し元はそのエラーを見ない. そのため、メソッド内部で完璧にエラーを飲み込んでハンドルし、メソッドの目的(呼び出し元が期待する戻り値や処理)を果たすことに気をつける必要がある.

特定のエラー後に行いたい処理がある場合、try/catchを使うと書けそう.

throws: エラーを呼び出し元に伝える.

throw を使っているメソッド内部で、エラーが発生した場合は、そのメソッドの呼び出し元がエラーをハンドルする必要がある.

メソッド宣言において、こういうエラーを投げうるということを宣言する意味がある.(そうすることで、呼び出し元にエラーハンドリングが推奨される.)


Rubyで言うと、throwsはデフォルトで、try/catchbegin/rescue に対応するのかなと思った.

10
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?