質問: null; try{ System.out.println(s.length()); }catch (NullPointerException e) { System.out.println("NullPointerException 例外をcatchしました"); System.out.println( "-- スタックトレース (ここから) --"); System.out.println(e.printStackTrace()); System.out.println("-- スタックトレース(ここまで) --"); System.exit(1); } } } ``` エラーの内容は以下通りです。 「ExceptionPractice.java:19: エラー: ここで'void'型を使用することはできません System.out.println(e.printStackTrace()); ^ エラー1個」 引数に指定できない理由につきまして、教えて頂けたら幸いです
回答: > > 引数に指定できない理由につきまして、教えて頂けたら幸いです > > > Throwable#printStackTraceは何も返さないからです。 単に呼び出すだけではダメなのでしょうか? ``` System.out.println("NullPointerException 例外をcatchしました"); System.out.println( "-- スタックトレース (ここから) --"); e.printStackTrace(); System.out.println("-- スタックトレース(ここまで) --"); ``` なお、他の出力も標準エラー出力に統一した方が良い気がします。 **追記:** もし標準エラー出力ではなく標準出力に統一するならば、 `e.printStackTrace(System.out);`と置くのがより適切です。 ``` System.err.println("NullPointerException 例外をcatchしました"); System.err.println( "-- スタックトレース (ここから) --"); e.printStackTrace(); System.err.println("-- スタックトレース(ここまで) --"); ``` あるいは ``` System.out.println("NullPointerException 例外をcatchしました"); System.out.println( "-- スタックトレース (ここから) --"); e.printStackTrace(System.out); System.out.println("-- スタックトレース(ここまで) --"); ```