Exceptionのnew,throwとスタックトレース
よくわかってなかったんですが、
JavaではExceptionオブジェクトをnewしたところが
スタックトレースに表示されるみたいですね。
たとえば、ExFactoryというクラスがあり、
hogehogeException という例外をnewして返却するメソッドthrowEx()を持っているとします。
ExFactory.javaそしてこれを呼ぶクラス ThrowTest というクラスがあり、
1: class ExFactory {
2: /** hogehogeExceptionのインスタンスをnewして返却 */
3: hogehogeException throwEx() {
4: return new hogehogeException();
5: }
6: }
7:
8: class hogehogeException extends Exception{}
以下の様にthrowExを呼び出しているとします。
ThrowTest.javaこの場合、スタックトレースに出力される先頭行の行は、
1: class ThrowTest {
2: /** メインで例外発生! */
3: public static void main(String[] args)
4: throws hogehogeException {
5: ExFactory exFactory = new ExFactory();
6: throw exFactory.throwEx();
7: }
8: }
ThrowTest.main ではなく ExFactory.throwEx となります。
実行結果
Exception in thread "main" hogehogeExceptionこれは当然と言えば当然かもしれません。
at ExFactory.throwEx(ExFactory.java:4)
at ThrowTest.main(ThrowTest.java:6)
例外はキャッチしてスローしなおすこともありますから。
根本原因(new された行を特定できないと意味が無いってことなんでしょうね…。