Маркированный разрыв игнорируется или рассматривается как нормальный разрыв

Моя целевая платформа - Android. Похоже, я не могу сделать разметку с разметкой даже один раз. Что мне не хватает? Похоже, что Android обработал последний помеченный перерыв как обычный разрыв, иначе он несколько раз зациклился.

public class Test{

public static final String TAG = Test.class.getSimpleName();

public static void labled_breakTest(){

int counter = 0; 

retry:
    try{
        counter += 1;
        throw new SQLiteException();

    }catch(SQLiteException e){
        Log.i(TAG, "Catch, Counter " + counter);
        if(counter <= 3) break retry;
    }finally{
        Log.i(TAG, "finally, Counter " + counter);
        if(counter <= 3) break retry;
    }

counter = 0;

loop_break:     
    while(counter < 3){
        counter += 1;

        Log.i(TAG, "Loop, Counter " + counter);
        break loop_break;
    };


}

}

 03-07 16:32:07.709: I/Test(18473): Catch, Counter 1
 03-07 16:32:07.709: I/Test(18473): finally, Counter 1
 03-07 16:32:07.713: I/Test(18473): Loop, Counter 1

Ответы

Ответ 1

Ваш вывод верен для кода, который вы предоставили. С вашего поста звучит так, как будто вы ожидаете переноса потока управления на метку. Это не относится к Java.

В Документы Java:

Оператор break завершает обозначение с надписью; он не передает поток управления этикетке. Управляющий поток переносится в инструкцию сразу же после указанного (завершенного) оператора.