|
||||||||||||||||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||||||||||||||||
| 例外 | ||||||||||||||||||||||||||
|
例外処理だからといって、曖昧な処理を実装せずに意味のある処理を実装するように心がけてください。例外処理で曖昧な実装をすると何の意図で例外処理をしているのかがわからなくなり、バグの原因にもなります。 |
||||||||||||||||||||||||||
| catch文で受け取る例外は、詳細な例外クラスで受け取る(C_EXT001) | ||||||||||||||||||||||||||
|
例外が発生したことを確認するため、また例外の種類に応じた処理を行うため、catch文で受け取る例外クラスは詳細なクラスから受け取るようにしてください。 例外は何でもキャッチすればよいというわけではありません。面倒だからといって、Exception、RuntimeException、Throwableをキャッチしてしまうと、例外サブクラスもすべてキャッチしてしまうため、別に処理されるべき例外が誤ってキャッチされる可能性があります。 以下の例のように、必ずException、RuntimeException、Throwable以下の詳細な例外クラスをキャッチして適切な例外処理を行いましょう。 適切な例外処理 |
||||||||||||||||||||||||||
public class FixedSample {
|
||||||||||||||||||||||||||
|
この規約は、Exception、RuntimeException、Throwableをキャッチしてはいけないということではなく、詳細度の高い(サブクラス)からcatch節を並べることで、詳細度の高い例外クラスを処理することができるということを意味しています。 上記の例では、IOExceptonよりもFileNotFoundExceptionが上位にあります。この順序を逆にしてしまうと、FileNotFoundExceptionが発生しても、IOExceptionのcatch節が例外を受け取ってしまいます。 |
||||||||||||||||||||||||||
| Exceptionクラスのオブジェクトを生成してスローしない(C_EXT002) | ||||||||||||||||||||||||||
|
例外をスローする際は、Exceptionクラスのオブジェクトを生成してスローしないでください。Exceptionクラスはすべての例外のスーパークラスです。そのオブジェクトを生成してスローすると、1つ前の規約(C_EXT001)で説明したように適切な例外処理が行えません。 JDK標準パッケージで用意されている例外には、表3のようにそれぞれに意味があります。
表3:JDK標準パッケージで用意されている例外 このように、例外にはきちんと意味を持たせることが大切です。Exceptionクラスではなく、上記のように意味のあるサブクラスのオブジェクトを生成し、スローするようにしましょう。 |
||||||||||||||||||||||||||
| catch節では必ず処理をする(C_EXT003) | ||||||||||||||||||||||||||
|
例外処理を実装しようとはしたが、catch節に何を書いてよいか迷ったことはありませんか。そしてcatch節を空にしていることはありませんか。 意図的に処理を記述しない場合は別ですが、catch節では必ず例外に対する処理を実装してください。何も実装しないとバグにつながる可能性があります。最低でもprintStackTrace()メソッドの実行やログ出力などにより、例外が発生したことを確認できるようにしてください。 以下にcatch節でどのような処理をするかサンプルコートを表4にあげますので、参考にしてみてください(通常は、設計の段階で決定されているべきものです)。
表4:catch節でどのような処理方法 |
||||||||||||||||||||||||||
|
前のページ 1 2 3 4 次のページ |
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||

