2015-05-16 9 views
7

W jednym z forum znalazłem poniższy kod jako pytanie:Co jest wykorzystanie tekstu z operatorem okrężnicy (np: Test :) w java

public class Test{ 
    public static void main(String[] args){ 
     System.out.println("Hello"); 
     Test: 
     System.out.println("World"); 
    } 
} 

i zapytał, jaki byłby wynik?

Pomyślałem, że będzie to błąd czasu kompilacji, ponieważ nie widziałem kodu Test: w java. Myliłem się, zaskakująco obie linie są drukowane po kompilacji i uruchomieniu powyżej kodu.

Czy ktoś może mi powiedzieć, jaki jest pożytek z tego kodu? I dlaczego nie rzuca błędu?

Odpowiedz

8

Tekst z dwukropkiem (:) nazywa się label. Może być używany w kontekście struktur kontrolnych (takich jak pętle) do break do lub continue w. W tym kontekście, chociaż jest to całkowicie legalne, nie ma sensu.

5

Tekst Test: jest etykieta, i jest opisany w the language specification, i są wykorzystywane do break lub continue od pętli wewnętrznej, jak pokazano w poniższym przykładzie:

przeciwieństwie do C i C++, język programowania Java ma bez instrukcji goto; Etykiety z etykietą identyfikatora są używane z instrukcjami break lub continue (§14.15, §14.16) pojawiającymi się w dowolnym miejscu w etykietowanej instrukcji.

public static void main(String[] args) { 
    outerLoop: 
    while (true) { 
     int i = 0; 
     while (true) { 
      System.out.println(i++); 
      if (i > 5) { 
       break outerLoop; 
      } 
      if (i > 10) { 
       break; 
      } 
     } 
     System.out.println("Broken inner loop"); 
    } 
    System.out.println("Broken outer loop"); 
}