編寫此文僅為以后可以復習。
最近在自學Java核心技術(很好的書,推薦!!),也是第一次從上面了解了goto,或許只是淺層了解。
錯誤之處希望大佬們給予批評與建議!!謝謝!!!
Java核心技術中就提到過:無限制的使用goto語句確實是導致錯誤的根源,但是有些情況下,偶爾使用goto 跳出循環 還是有益處的。
下面首先看一下不帶goto標簽的break語句:
while ( years <= 100 ){ balance += payment; double interest = balance * interestRate / 100; balance += interest; if ( balance >= goal ) break; years++; }
很簡單的break循環,在循環開始時,如果years > 100,或者在循環體中balance >= goal,則退出循環語句。
下面是帶goto標簽的break語句,請注意,標簽必須放在希望跳出的最外層循環之前,並且必須緊跟一個冒號,:
Scanner in = new Scanner(System.in);
int n;
read_data:
while(. . .) //這個循環語句用標簽加標簽
{
. . .
for (. . .) //這個內部循環沒有標記
{
System.out.print("Enter a number >= 0: ");
n = in.nextInt();
if(n < 0) //不應該發生-不能繼續
break read_data;
//返回 read_data 循環
. . .
}
}
// 此語句在標記中斷后立即執行
if (n < 0) // 檢查不良情況
{
// 處理不良情況
}
else
{
// 進行正常加工
}
如果輸入有誤,通過執行帶標簽的break跳轉到帶標簽的語句塊末尾。對於任何使用break語句的代碼都要檢測循環是正常結束,還是由break跳出。
事實上,可以將標簽應用到任何語句中,甚至可以應用到if語句或者塊語句中,如下所示:
label: { . . . if(condition) break label;// exits block . . . } //當中斷語句執行時跳轉到這里
因此,如果希望使用一條goto語句,並將一個標簽放在想要跳轉的語句塊之前,就可以使用break語句!當然,前面說過了Java語句中不提倡,大家了解就行。
另外,只能跳出語句塊,而不能跳入語句塊。