Ho eseguito alcuni semplici esperimenti come questo:Il lancio di un'eccezione modifica il suo stato?
public static void main(String[] args) {
try {
NullPointerException n = new NullPointerException();
System.out.println(Lists.newArrayList(n.getStackTrace()));
n.printStackTrace();
System.out.println(Lists.newArrayList(n.getStackTrace()));
throw n;
} catch (NullPointerException e) {
e.printStackTrace();
System.out.println(Lists.newArrayList(e.getStackTrace()));
}
}
e ottenere output come questo:
java.lang.NullPointerException
at MyTest.main(MyTest.java:231)
java.lang.NullPointerException
at MyTest.main(MyTest.java:231)
[MyTest.main(AbstractScannerTest.java:231)]
[MyTest.main(AbstractScannerTest.java:231)]
[MyTest.main(AbstractScannerTest.java:231)]
ma mi chiedo se tutto ciò viene fatto per un'eccezione quando viene gettato. Questa è una domanda principalmente accademica, anche se potrebbe essere rilevante in determinate circostanze se un'eccezione fosse parte di un'API e potrebbe essere o non essere stata generata quando fornita a un'implementazione.
Per ottenere una traccia stack completa e forse un po 'più di informazioni quando si stampa un errore, è sufficiente fare "System.out.println (e);" o "System.out.println (" errore ", e); 'e dovrebbe stampare l'intero stacktrace. Solo un avviso. – sparks
'printStackTrace' usa' System.err' non 'System.out'. Per fare in modo che l'output sia come previsto, usa 'printStacktrace (System.out)'. –
Si noti che, in Java, la traccia dello stack di eccezioni viene eseguita quando viene creata l'eccezione, non quando viene generata. –