プロが教えるわが家の防犯対策術!

try の入れ子はどちらで処理されるのでしょうか?



public aaaa()
{
try(){
bbbb();
}
catch(){
}
finary(){
}
}
private bbbb()
{
try(){
xxxxx ← ここでエラーになる
}
catch(){
}
finary(){
}
}

この場合、
catch()処理は aaaa() の catch() を行う?それとも bbbb() ?
finary() ()処理は aaaa() の finary() を行う?それとも bbbb() ?

A 回答 (3件)

エラー箇所でスローされたものと、catchでキャッチするものにもよるので回答できません。



基本は次のurlでも読んでください。
http://msdn.microsoft.com/ja-jp/library/s7fekhdy …
    • good
    • 0

まず, この質問文にあるプログラムは間違っています. 「finally()」という書き方はできませんし, 「catch()」も文法的に不正です.



そして, この「catch()」が不正であることから, 「このプログラムにおいて」「catch() は bbbb() の方で実行され」るかどうかを判断することは不可能です. だから #1 では「発生した例外を受け取れる catch が受け取る」という, 一般的な原則しか書いていません... ん~, 正確には
「発生した例外を受け取れる, 一番内側の try に付随する catch が受け取る」
か.

finally は (ここも文法的には不正だが) 最終的に両方とも実行されます.
    • good
    • 0

finary じゃなくって finally では?



そして発生した例外を受け取れる catch が受け取る.

finally の部分は, try ブロックを抜け出すときには必ず実行される.

この回答への補足

finally の間違いです。

それで結局catch() は bbbb() の方で実行され
finally() は aaaa() bbbb() の両方で実行されるということでしょうか?

補足日時:2013/05/09 23:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!