- - PR -
finallyブロックは正常に完了しません。の警告
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-10-30 21:34
Eclipseで以下のようにコーディングしてビルドを実行すると、
「finallyブロックは正常に完了しません。」という警告が表示されます。 実行することはできるのですが、なぜこのようなエラーが出るのでしょうか。 ネットで調べても出てこないので、質問させていただきました。 よろしくお願いします。 public boolean start( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws Exception { try{ HttpSession session = request.getSession( false ); //〜省略〜 }catch( Exception e ){ System.out.println( "ERROR [ " + e.getMessage() + " ]" ); e.printStackTrace(); throw e; }finally{ return true; } } 環境:eclipse 3.2 Struts 1.2.9 Tomcat 5.0.2.8 | ||||
|
投稿日時: 2006-10-30 21:48
ひとつ聞かせてもらいたい。
finallyにreturnを書く意図はなんでしょう? | ||||
|
投稿日時: 2006-10-30 21:56
finally句は例外が発生しても必ず実行されると言うことで、
returnされずにメソッドが終わる事のないようにという考えで書いたのですが…。 | ||||
|
投稿日時: 2006-10-30 22:02
finallyブロックはcatchブロック内のthrowの後にも動くブロックです。
つまり、throwの後にreturnしているわけで、矛盾しているわけです。 ただし、tryの場合は正常なので警告なわけです。 | ||||
|
投稿日時: 2006-10-30 22:12
そういうことでしたか。ありがとうございます。
では、 }catch( Exception e ){ System.out.println( "ERROR [ " + e.getMessage() + " ]" ); e.printStackTrace(); throw e; }finally{ } return true; } と書けばいいと言うことですか。 | ||||
|
投稿日時: 2006-10-30 22:26
いや、それならfinallyは不要です。
1ステップいくらという単位でお金をもらう仕事じゃなければ、無駄なのでやめましょう。 例えば、
みたいに使います。 これなら、例外が発生しそうなメソッドを実行して、 例外が発生してもしなくても、クローズ処理ができるわけです。 | ||||
|
投稿日時: 2006-10-31 00:08
ちなみに、finallyの中にreturnを書くと、どんな例外が発生してもfinallyの中のreturnの結果が返り、例外は完全に握りつぶせます。
たぶん、Errorも握りつぶせると思います。 | ||||
|
投稿日時: 2006-10-31 01:00
ちなみに、finallyの中にreturnを書くと、どんな値を返してもfinallyの中のreturnの結果が返り、元のreturn値は完全に握りつぶせます。
トリビアにはなるかもしれませんが、そんなことしちゃいけません。 |