第四章 控制執行流程

  在Java中,語句的種類可分爲:表達式語句聲明語句控制流程語句。下面將介紹這三種語句:java

表達式語句

表達式

  • 賦值表達式
  • ++或--表達式
  • 方法調用
  • 對象建立表達式
  • 等等...

一個表達式,在計算(執行)後的結果能夠表示如下三種含義:express

  • 一個變量
  • 一個值
  • 無(當且僅當表達式是一個對於返回值爲void的函數的調用)

一個表達式的類型,指的就是它在計算後獲得的結果的類型。關於表達式更多信息可參考Java語言特性規定。函數

表達式語句

以上四種表達式及其複合表達式,在加上分號(;)就成爲了相應的表達式語句,以下所示:code

// assignment statement
aValue = 8933.234;
// increment statement
aValue++;
// method invocation statement
System.out.println("Hello World!");
// object creation statement
Bicycle myBike = new Bicycle();

聲明語句

  形如:對象

// declaration statement
double aValue = 8933.234;

控制流程語句

語句塊

​ 語句塊是由一對含有零條或者多條語句的大括號所組成,可以出如今任何一條單獨語句可以出現的地方。ci

class BlockDemo {
     public static void main(String[] args) {
          boolean condition = true;
          if (condition) { // begin block 1
               System.out.println("Condition is true.");
          } // end block one
          else { // begin block 2
               System.out.println("Condition is false.");
          } // end block 2
     }
}

​ 在語句塊中聲明的變量,它的做用域僅限於該語句塊。也就是說下面這樣的代碼是被容許的:作用域

public static void main(String[] args) {
    {
        {
            int i=0;
        }
        {
            int i=0;
        }
    }

選擇語句(decision-making statements )

if-then和if-then-else

if(boolean-exprenssion){
    statements;
}
//或者
if(boolean-exprenssion){
    statements;
}else{
    statements;
}

  下面的例子中出現了else if,但其並非新的關鍵字,而僅僅是else後面緊跟一個新的if語句。rem

if(boolean-exprenssion){
    statements;
}else if(boolean-exprenssion){
    statements;
}else{
    
}

switch

​ 雖然一樣是選擇語句,但與if-then和if-then-else不一樣,switch能夠有更多可能執行的路徑,switch語句中的表達式類型能夠是byte、short、char、int以及這四種對應的包裝類型Byte、Short、Character、Integer。還能夠是String類型和枚舉類型。注意:當使用的是String類型的時候,表達式的值不能爲null,不然會致使NullPointerException。it

public class SwitchDemo {
    public static void main(String[] args) {
        int month = 8;
        String monthString;
        switch (month) {
            case 1:  monthString = "January";//這裏的1就是一個case標籤
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;//由於在最後了,因此其實是沒有必要加break的
        }
        System.out.println(monthString);
    }
}

​ switch語句的主體被稱爲switch塊,在switch塊中能夠有一個或者多個case/default標籤,switch語句首先計算表達式,而後與case標籤進行匹配。break語句是爲告終束switch語句,沒有breakd執行完case後面的語句以後,將繼續往下執行。直到碰見break或者執行完全部語句。case標籤必須是常量表達式或者是枚舉常量,case標籤的類型對於switch表達式的類型而言,必須是可賦值的。更多可參考java語言特性規定。io

循環語句

for

for (initialization; termination; increment) {
    statement(s)
}

while

while (expression) {
    statement(s)
}

do-while

do {
     statement(s)
} while (expression);

分支語句

關於標籤:

public static void main(String[] args) {
        label://後面必須緊跟循環語句
            for(;;) {
                for(;;)
                break label;
            }
    }

​ 如上面代碼所示,標籤就是後面根有冒號的標識符,而且標籤與循環語句之間不容許插入任何其餘語句,不然在使用break/continue標籤的地方會編譯出錯。在Java裏須要使用標籤的理由就是想從多層循環嵌套中break或continue

break

  • 通常的break會中斷並跳出當前層循環
  • 帶標籤的break會中斷而且跳出標籤所指的循環。

continue

  • 通常的continue會退回到當前層循環的開頭,並繼續執行。
  • 帶標籤的continue會到達標籤所指的位置,而且繼續執行緊跟在那個標籤後面的循環。

return

​ return語句從當前的方法離開,回到方法被調用的地方,有兩種形式,一種帶返回值,一種不帶返回值(聲明方法返回值類型爲void時)。

相關文章
相關標籤/搜索