構造を壊すので自然と避けていたのだが、ちょっとした検証のためにあえて finally に return を書いてみたら、呼び出し元のcatchブロックが実行されない、という現象がおきて、ちょっと意外だったのでメモ。まとめると、
同じコンテキストで try - catch - finally を書いた場合、 try - catch - finally の順に実行される。
呼び出し元コンテキストで try - catch を書き、呼び出される側コンテキストで try - finally を書いた場合、 try - finally - catch の順に実行される。このとき、finally に return があると、呼び出し元コンテキストの catch には遷移しない。
ツッコミより追記。JLSにちゃんと書いてある。
おじゃまします。以前に finally での return でハマりました。自分が書いた部分ではなかったのですが、デバッグに付き合わされました(笑)。コンパイル時に警告してくれても良いと思います。その時は http://java-house.jp/ml/archive/j-h-b/049757.html を見てはじめてそういう仕様だと知りました。
ちゃんとJLSに書いてあるんですね……追記させていだたきました。ありがとうございます。