問題
開発者は次のコードを持っています。
try {
List<String> nameList;
Account a;
String s = a.Name;
nameList.add(s);
} catch (ListException le) {
System.debug('List Exception');
} catch (NullPointerException npe) {
System.debug('NullPointer Exception');
} catch (Exception e) {
System.debug('Generic Exception');
}
どのメッセージがログに記録されますか。
- メッセージは記録されない
- Generic Exception
- List Exception
- NullPointer Exception
正解
- メッセージは記録されない
- Generic Exception
- List Exception
- NullPointer Exception
解説
それぞれの選択肢の理由について説明します。
□ メッセージは記録されない
これは不正解です。コードは例外をキャッチするためのcatchブロックを持っているので、例外が発生した場合、関連するメッセージがログに記録されます。
□ Generic Exception
これは不正解です。例外が発生することは確かですが、このケースでは NullPointerException
が発生するため、最も具体的な例外に対応する catch ブロックが実行されます。Generic Exception
は、特定されないその他の例外に対してログを記録するためのもので、ここでは実行されません。
□ List Exception
これは不正解です。このコードにおいて ListException
は発生しません。ListException
はリスト操作で発生する特定の問題に関連しており、nameList
の初期化がされていないために発生するのは NullPointerException
です。
□ NullPointer Exception
これは正解です。Account a;
は初期化されておらず、a.Name
にアクセスしようとすると a
が null
を参照しているため NullPointerException
が発生します。また、List<String> nameList;
も初期化されていないため、nameList.add(s);
を呼び出すところでも NullPointerException
が発生します。NullPointerException
に該当する catch ブロックがこの例外を捕捉し、”NullPointer Exception” メッセージがログに記録されます。
コメント