Warum ist in diesem Fall das Auslösen eines aktivierten Ausnahmetyps zulässig?

Ich habe durch Zufall bemerkt, dass diesthrow statement (extrahiert aus etwas komplexerem Code) kompiliert:

void foo() {
    try {

    } catch (Throwable t) {
        throw t;
    }
}

Für einen kurzen, aber glücklichen Moment dachte ich, dass geprüfte Ausnahmen endlich beschlossen hatten, einfach nur zu sterben, aber es wird immer noch mürrisch:

void foo() {
    try {

    } catch (Throwable t) {
        Throwable t1 = t;
        throw t1;
    }
}

Dastry Block muss nicht leer sein; Es scheint, dass es Code haben kann, solange dieser Code keine aktivierte Ausnahme auslöst. Das scheint vernünftig, aber meine Frage ist, welche Regel in der Sprachspezifikation beschreibt dieses Verhalten? Soweit ich das beurteilen kann,§14.18 Die throw-Anweisung verbietet es ausdrücklich, weil die Art dert expression ist eine aktivierte Ausnahme und wird weder abgefangen noch als geworfen deklariert. (?)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage