Javaにチェック例外なんていらない気がするんだが

ほとんどの場合、例外をキャッチするかどうかなんて使う側の要件による。IO関連とかとか、システムリソースを使うにしても基本的に

try{
    //リソースを使う
} finally {
    //リソースを開放する。
}

でおkだし。
キャッチしてもどうしようもない例外は

Thread.setDefaultUncaughtExceptionHandler(
    new UncaughtExcepitonHandler() {
        public void uncaughtException(Thread t,Throwable e) {
           //ログ出力
        }
    }
);

とかしてれば十分だ。
それでも例外設計の難しさはなくならないけど。