Por que o Java permite quebras rotuladas em declarações arbitrárias?

Acabei de saber hoje que o seguinte código Java é perfeitamente legal:

myBlock: {
    /* ... code ... */

    if (doneExecutingThisBlock())
        break myBlock;

    /* ... more code ... */
}

Observe quemyBlock não é um loop - é apenas um bloco de código que delimitei com chaves.

Parece uma característica bastante estranha. Isso significa que você pode usar um nomebreak sair de umif declaração ou bloco anônimo, embora você normalmente não possa usar umbreak declaração nesses contextos.

Minha pergunta é esta:existe uma boa razão para essa decisão de design? Ou seja, por que fazê-lo para que você possa interromper apenas determinadas instruções anexas usando rotuladobreaks mas não regularbreaks? E por que permitir esse comportamento? Dado o quão (comparativamente) o Java bem projetado é uma linguagem, eu diria que há uma razão para isso, mas honestamente não consigo pensar em uma.

questionAnswers(8)

yourAnswerToTheQuestion