Javaの例外処理

例外処理

APIドキュメントを見ながらコードを書いたつもりなのに,コンパイルエラーが出てはまってしまったのでメモ.
ちゃんと例外処理を理解していなかったのが原因.

チェック例外

必ずチェック(try/catch)しないといけない例外のこと.チェックしないとコンパイルエラーになる. どんな例外をチェックすべきかはメソッドによって決まっていてAPIドキュメントに書いてある.
例えばURLクラスのコンストラクタを呼び出そうとして

import java.net.URL;

public class HelloHttp {
    public static void main(String[] args) {
        URL myURL = new URL("http://www.address.com");
        //あとの処理
 }
}

とだけ書くとコンパイルエラーとなってEclipseではUnhandled exception type MalformedURLExceptionと言われる.
APIドキュメントを見ると

例外:
MalformedURLException - 不明なプロトコルが指定された場合。

とあるので例外をチェックして,例えば

import java.net.URL;
import java.net.MalformedURLException;

public class HelloHttp {
    public static void main(String[] args) {
        try{
            URL myURL = new URL("http://www.address.com");
        } catch (MalformedURLException e) {
            System.err.println("Malformed URL");
        }    
        //あとの処理
 }
}

としなければならない.
ちなみに,MalformedURLExceptionクラスの呼び出しはjava.net.MalformedURLExceptionが必要.

非チェック例外

チェックしなくてもいい,というよりコンパイルエラーにならない例外のこと. 2種類ある.

  1. どうしようもない重大な深刻な例外...メモリ枯渇など
  2. いちいち検出していられない例外...ゼロ割りなど

2の例外については,例外というよりもプログラムのバグだから修正しろよ!という考え方みたい.