當前位置:編程學習大全網 - 源碼下載 - JAVA有跳轉語句嗎? 當執行到某壹句的時候需要跳轉到其他語句上面,如果沒有請問怎麽實現呢?

JAVA有跳轉語句嗎? 當執行到某壹句的時候需要跳轉到其他語句上面,如果沒有請問怎麽實現呢?

5.3.1 使用break 語句

在Java 中,break語句有3種作用。第壹,妳已經看到,在switch語句中,它被用來終止壹個語句序列。第二,它能被用來退出壹個循環。第三,它能作為壹種“先進”的goto 語句來使用。下面對最後 2種用法進行解釋。

使用break 退出循環

可以使用break 語句直接強行退出循環,忽略循環體中的任何其他語句和循環的條件測試。在循環中遇到break語句時,循環被終止,程序控制在循環後面的語句重新開始。下面是壹個簡單的例子:

// Using break to exit a loop.

class BreakLoop {

public static void main(String args[]) {

for(int i=0; i<100; i++) {

if(i == 10) break; // terminate loop if i is 10

System.out.println("i: " + i);

}

System.out.println("Loop complete.");

}

}

該程序產生如下的輸出:

i: 0

i: 1

i: 2

i: 3

i: 4

i: 5

i: 6

i: 7

i: 8

i: 9

Loop complete.

正如妳看到的那樣,盡管for 循環被設計為從 0執行到99,但是當i等於10時,break語句終止了程序。break語句能用於任何 Java 循環中,包括人們有意設置的無限循環。例如,將上壹個程序用while 循環改寫如下。該程序的輸出和剛才看到的輸出壹樣。

// Using break to exit a while loop.

class BreakLoop2 {

public static void main(String args[]) {

int i = 0;

while(i < 100) {

if(i == 10) break; // terminate loop if i is 10

System.out.println("i: " + i);

i++;

}

System.out.println("Loop complete.");

}

}

在壹系列嵌套循環中使用break 語句時,它將僅僅終止最裏面的循環。例如:

// Using break with nested loops.

class BreakLoop3 {

public static void main(String args[]) {

for(int i=0; i<3; i++) {

System.out.print("Pass " + i + ": ");

for(int j=0; j<100; j++) {

if(j == 10) break; // terminate loop if j is 10

System.out.print(j + " ");

}

System.out.println();

}

System.out.println("Loops complete.");

}

}

該程序產生如下的輸出:

Pass 0: 0 1 2 3 4 5 6 7 8 9

Pass 1: 0 1 2 3 4 5 6 7 8 9

Pass 2: 0 1 2 3 4 5 6 7 8 9

Loops complete.

從中可以看出,在內部循環中的break語句僅僅終止了該循環,外部的循環不受影響。

關於break ,在這裏要記住兩點。首先,壹個循環中可以有壹個以上的break 語句。但要小心,太多的break 語句會破壞妳的代碼結構。其次,switch語句中的break僅僅影響該switch 語句,而不會影響其中的任何循環。

註意:break 不是被設計來提供壹種正常的循環終止的方法。循環的條件語句是專門用來終止循環的。只有在某類特殊的情況下,才用break 語句來取消壹個循環。

把break 當作goto 的壹種形式來用

break語句除了在switch語句和循環中使用之外,它還能作為goto 語句的壹種“文明”形式來使用。Java 中沒有 goto 語句,因為goto 語句提供了壹種改變程序運行流程的非結構化方式。這通常使程序難以理解和難於維護。它也阻止了某些編譯器的優化。但是,有些地方goto 語句對於構造流程控制是有用的而且是合法的。例如,從嵌套很深的循環中退出時, goto 語句就很有幫助。因此,Java 定義了break 語句的壹種擴展形式來處理這種情況。通過使用這種形式的break,妳可以終止壹個或者幾個代碼塊。這些代碼塊不必是壹個循環或壹個switch語句的壹部分,它們可以是任何的塊。而且,由於這種形式的break 語句帶有標簽,妳可以明確指定執行從何處重新開始。妳將看到,break帶給妳的是goto 的益處,並舍棄了goto 語句帶來的麻煩。

標簽break 語句的通用格式如下所示:

break label;

這裏,標簽label 是標識代碼塊的標簽。當這種形式的break執行時,控制被傳遞出指定的代碼塊。被加標簽的代碼塊必須包圍break 語句,但是它不需要是直接的包圍break的塊。這意味著妳可以使用壹個加標簽的break 語句退出壹系列的嵌套塊。但是妳不能使用break 語句將控制傳遞到不包含break 語句的代碼塊。

要指定壹個代碼塊,在其開頭加壹個標簽即可。標簽(label )可以是任何合法有效的Java 標識符後跟壹個冒號。壹旦妳給壹個塊加上標簽後,妳就可以使用這個標簽作為break 語句的對象了。這樣做會使執行在加標簽的塊的結尾重新開始。例如,下面的程序示例了 3 個嵌套塊,每壹個都有它自己的標簽。break語句使執行向前跳,調過了定義為標簽second 的代碼塊結尾,跳過了2個println ( ) 語句。

// Using break as a civilized form of goto.

class Break {

public static void main(String args[]) {

boolean t = true;

first: {

second: {

third: {System.out.println("Before the break.");if(t) break second; // break out of second blockSystem.out.println("This won't execute");

}

System.out.println("This won't execute");}System.out.println("This is after second block.");

}

}

}

運行該程序,產生如下的輸出:

Before the break.

This is after second block.

標簽break 語句的壹個最普遍的用法是退出循環嵌套。例如,下面的程序中,外層的循環只執行了壹次:

// Using break to exit from nested loops

class BreakLoop4 {

public static void main(String args[]) {

outer: for(int i=0; i<3; i++) {

System.out.print("Pass " + i + ": ");

for(int j=0; j<100; j++) {

if(j == 10) break outer; // exit both loops

System.out.print(j + " ");

}

System.out.println("This will not print");

}

System.out.println("Loops complete.");

}

}

該程序產生如下的輸出:

Pass 0: 0 1 2 3 4 5 6 7 8 9 Loops complete.

妳可以看到,當內部循環退到外部循環時,兩個循環都被終止了。記住如果壹個標簽不在包圍break的塊中定義,妳就不能break 到該標簽。例如,下面的程序就是非法的,且不會被編譯:

// This program contains an error.

class BreakErr {

public static void main(String args[]) {

one: for(int i=0; i<3; i++) {

System.out.print("Pass " + i + ": ");

}

for(int j=0; j<100; j++) {

if(j == 10) break one; // WRONG

System.out.print(j + " ");

}

}

}

因為標簽為one的循環沒有包圍break 語句,所以不能將控制傳遞到該塊。

5.3.2 使用continue 語句

有時強迫壹個循環提早反復是有用的。也就是,妳可能想要繼續運行循環,但是要忽略這次重復剩余的循環體的語句。實際上,goto 只不過是跳過循環體,到達循環的尾部。continue 語句是break語句的補充。在while 和do while 循環中,continue 語句使控制直接轉移給控制循環的條件表達式,然後繼續循環過程。在for 循環中,循環的反復表達式被求值,然後執行條件表達式,循環繼續執行。對於這3種循環,任何中間的代碼將被旁路。

下例使用continue 語句,使每行打印2個數字:

// Demonstrate continue.

class Continue {

public static void main(String args[]) {

for(int i=0; i<10; i++) {

System.out.print(i + " ");

if (i%2 == 0) continue;

System.out.println("");

}

}

}

該程序使用%(模)運算符來檢驗變量i是否為偶數,如果是,循環繼續執行而不輸出壹個新行。該程序的結果如下:

0 1

2 3

4 5

6 7

8 9

對於break語句,continue 可以指定壹個標簽來說明繼續哪個包圍的循環。下面的例子運用continue 語句來打印0到9的三角形乘法表:

// Using continue with a label.

class ContinueLabel {

public static void main(String args[]) {

outer: for (int i=0; i<10; i++) {

for(int j=0; j<10; j++) {

if(j > i) {

System.out.println();

continue outer; }

System.out.print(" " + (i * j)); }}

System.out.println();

}

}

在本例中的continue 語句終止了計數j的循環而繼續計數i的下壹次循環反復。該程序的輸出如下:

0

0 1

0 2 4

0 3 6 9

0 4 8 12 16

0 5 10 15 20 25

0 6 12 18 24 30 36

0 7 14 21 28 35 42 49

0 8 16 24 32 40 48 56 64

0 9 18 27 36 45 54 63 72 81

很好的利用continue 語句的情況很少,壹個原因是Java 提供了壹系列豐富的循環語句,可以適用於絕大多數應用程序。但是,對於那些需要提早反復的特殊情形,continue 語句提供了壹個結構化的方法來實現。

5.3.3 使用return語句

最後壹個控制語句是return。return語句用來明確地從壹個方法返回。也就是,return 語句使程序控制返回到調用它的方法。因此,將它分類為跳轉語句。盡管對return 語句的詳細討論在第 7 章開始,這裏對其作簡要地介紹。

在壹個方法的任何時間,return 語句可被用來使正在執行的分支程序返回到調用它的方法。下面的例子說明這壹點。下例中,由於是Java 運行系統調用main() ,因此,return語句使程序執行返回到Java 運行系統。

// Demonstrate return.

class Return {

public static void main(String args[]) {

boolean t = true;

System.out.println("Before the return.");

if(t) return; // return to caller

System.out.println("This won't execute.");

}

}

該程序的結果如下:

Before the return.

正如妳看到的壹樣,最後的println( ) 語句沒有被執行。壹旦return語句被執行,程序控制傳遞到它的調用者。

最後壹點:在上面的程序中,if(t)語句是必要的。沒有它,Java 編譯器將標記“執行不到的代碼”(unreachable code )錯誤,因為編譯器知道最後的println ()語句將永遠不會被執行。為阻止這個錯誤,為了這個例子能夠執行,在這裏使用if語句來“蒙騙”編譯器。

  • 上一篇:呼倫貝爾盟呼倫貝爾人物
  • 下一篇:Explorer.EXE
  • copyright 2024編程學習大全網