- PR -

コンパイルエラー:「finally節が正常に完了できません」

1
投稿者投稿内容
ino
会議室デビュー日: 2004/04/26
投稿数: 3
投稿日時: 2004-04-26 10:26
--------------------------------------------------------------------------------
初めて書き込みさせて頂きます。
初心者ですので、よろしくお願い致します。

現在、Java(Ver1.4.2)で「finally節が正常に完了できません。」という
コンパイルエラーが出ます。
Ver1.3.1ではエラーは出ないのですが・・・。

Ver1.4.2では
 try {
   ・・・
 } catch (例外クラス型 引数名) {
   ・・・
 } finally {
   ・・・
 }
の構文は使えないのでしょうか?

uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-04-26 12:17
引用:

inoさんの書き込み (2004-04-26 10:26) より:
Ver1.4.2では
 try {
   ・・・
 } catch (例外クラス型 引数名) {
   ・・・
 } finally {
   ・・・
 }
の構文は使えないのでしょうか?


そんなことはありません。何か他の原因があるはずですが、他にエラーは出ていないのでしょうか?
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-04-26 12:23
Java って、エラーの根本原因の箇所を的確に選別できん事が多いですな。
コンパイラの癖に。
根本原因は他の箇所にある場合も結構多いです。
bes
会議室デビュー日: 2003/10/30
投稿数: 3
投稿日時: 2004-04-26 12:26
finally句の中で例外throwしたりreturnしたりしてません?
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-04-26 13:24
unibon です。こんにちわ。

引用:

besさんの書き込み (2004-04-26 12:26) より:
finally句の中で例外throwしたりreturnしたりしてません?


ご指摘のとおりですね。たとえば、
コード:
public class Hoge {

    public void foo() {
        try {
        } finally {
            return;
        }
    }
}


を 1.4.2 でコンパイルすると、
コード:
Hoge.java:7: 警告: finally 節が正常に完了できません。
        }
        ^
警告 1 個


という警告が出ます。
そうだ、警告ですね。エラーではないですね。
#Eclipse 2.1.3 だと何も出ませんでした。
英語だとこのメッセージは "finally clause cannot complete normally." あたりですよね。

ちなみに finally での return については、有名なものとしては、別のメーリングリストですが、
http://java-house.jp/ml/archive/j-h-b/049757.html
がありますね。
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-04-26 13:35
finally節の中が無限ループになっていたりしませんか?
以下のコードをj2sdk1.4.2コンパイラでコンパイルすると
件のコンパイルエラーが拝めます。
コード:
public class Test {

public static void main(String[] args) throws Exception{
try{}
catch(Exception e){}
finally{
while(true){}
}
}
}



# 追記・訂正
コンパイルエラーではなく、警告でした。それに、return/throwの方が有力そうですね。

[ メッセージ編集済み 編集者: Wata 編集日時 2004-04-26 13:46 ]
ino
会議室デビュー日: 2004/04/26
投稿数: 3
投稿日時: 2004-04-27 12:07
みなさま、お忙しい中、ご回答ありがとうございました。

みなさまのおっしゃる通り、finally節にreturn文を書いておりました。
何分初心者なもので、finally節には「最後に必ず実行される処理」ということで、
return文を書いても良いものだと思っておりました。
勉強不足です。。。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)