Mi sa che stai fraintendendo il senso dell'istruzione break con label: non è un goto!
L'istruzione break, da sola, serve a terminare il ciclo entro cui essa è invocata. L'esecuzione prosegue con il codice posto DOPO il ciclo.
L'istruzione break con label permette di terminare il ciclo "etichettato" dalla label (che potrebbe essere, quindi, più esterno rispetto al ciclo in cui viene invocata) ed il codice prosegue con il codice posto DOPO il ciclo etichettato.
Esempio: cerca un valore maggiore di 10 all'interno di un array.
boolean trovato = false;
cicloesterno:
for (row = 0; row < arr.length; row++) {
for (col = 0; col < arr[row].length; col++) {
if (arr[row][col] > 10) {
trovato = true;
// Questo fa terminare il ciclo esterno SUBITO, così non serve che controlli le altre righe!
break cicloesterno;
}
}
}
Se non avessi usato la label, verrebbe terminato solo il ciclo sulle colonne, riprendendo il controllo sulle righe successive.
Ciao.