Ich bin heute in Java auf ein komisches Szenario gestoßen, während ich programmiert habe. Ich habe einen try..catch-Block in meiner Methode, die keine throws-Klausel hat und ich bin in der Lage, das Ausnahmeobjekt zu werfen, das im catch-Block gefangen wurde. Es ist ein Objekt der Exception-Klasse, daher ist es keine ungeprüfte Ausnahme. Außerdem wird der Stacktrace nicht gedruckt, wenn eine Ausnahme auftritt, die Exception gerade verschluckt wird.JDK 1.7 weiter, das Werfen eines Ausnahmeobjekts von catch block erfordert keine throws-Klausel !!! Warum ist das so?
Im Folgenden mein Codebeispiel ist,
public class ExceptionTest {
public void test() {
try
{
// Some code which may throw exception.
}
catch(Exception ex)
{
// Compiler should ask me to have a *throws Exception* in the signature, when I am throwing an exception object.
throw ex;
}
}
}
Allerdings, wenn ich Objekt eine neue Ausnahme statt der gefangenen Ausnahmeobjekts werfe, Compiler fragen mich, eine Klausel in der Methodensignatur haben, wirft.
N.B: I am facing this situation when running in Java 7 or 8.
Ich wundere mich, wohin wird das geworfene Objekt gehen? Jeder mit einer Idee auf diese bitte ...
Verwandte auch http://stackoverflow.com/questions/35184092/why-is-catching-checked-exceptions-allowed-for-code-that-does-not-throw-exceptio – Tunaki