Por que lançar um tipo de exceção verificado é permitido neste caso?

Notei por acidente que issothrow A instrução (extraída de algum código mais complexo) compila:

void foo() {
    try {

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

Por um momento breve, mas feliz, pensei que as exceções verificadas finalmente haviam decidido simplesmente morrer, mas ainda fica empolgado com isso:

void foo() {
    try {

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

otry o bloco não precisa estar vazio; parece que pode ter código, desde que esse código não gere uma exceção verificada. Isso parece razoável, mas minha pergunta é: qual regra na especificação de linguagem descreve esse comportamento? Tão longe quanto eu consigo ver,§14.18 A declaração throw proíbe explicitamente, porque o tipo det A expressão é uma exceção verificada e não é capturada ou declarada lançada. (?)

questionAnswers(3)

yourAnswerToTheQuestion