Точка с запятой (;) является пустым оператором. Данная конструкция вполне применима там, где не предполагается выполнение никаких Действий. Преждевременное завершение пустого оператора невозможно.
Метки
Любой оператор, или блок, может иметь метку. Метку можно указывать в качестве параметра для операторов break и continue. Область видимости метки ограничивается оператором, или блоком, к которому она относится. Так, в следующем примере мы получим ошибку компиляции:
public class Test { static int X = 5; static { }
public TestO {}
public static void main(String[] args) {
Test t = new TestO;
int X = 1;
Lbl1:{if(x ==0) break Lbl1;}
Lbl2:{if(x>0) break Lbl1; } } }
В случае если имеется несколько вложенных блоков и операторов, допускается обращение из внутренних блоков к меткам, относящимся к внешним.
Этот пример является вполне корректным:
public class Test { static int X = 5; static {}
public TestO { }
public static void main(String[] args) { Testt = new TestO; int L2 = 0;
Test: for(int i = 0; i< 10;i++) { test: for(int j = 0; j< 10;j++) {
if( i*i > 50) break Test; } } } private void testO {} }
В этом же примере можно увидеть, что метки используют пространствие имен, отличное от пространства имен переменных, методов и классов. Традиционно использование меток не рекомендуется, особенно в легкоориентированных языках, поскольку серьезно усложняет понимание порядка выполнения кода, а значит, и его тестирование и отладку.
Этот запрет можно считать не столь строгим, поскольку самый опасный оператор goto отсутствует в некоторых ситуациях (как в рассматриваемом примере с вложенными циклами) использование меток вполне оправданно, но, конечно, их применение следует ограничивать лишь самыминеобходимыми случаями.