第四章.控制執行流程

1.導語

  • 程序必須在執行過程中控制它的世界,並作出選擇。在java中,要使用執行控制語句來作出選擇。
  • java使用了C的所有的流程控制語句,關鍵字如 if-else、while、do-while、for、return、break以及選擇語句switch,
  • java並不支持got語句,它是解決某些特殊問題最便利的方法。
  • 在java中,仍然可以進行類似goto那樣的跳轉,但有很多的限制。

2.true和false

  • 所有的條件語句都利用條件表達式的真或假來決定執行路徑。例如a==b,
    它用條件操作符“==”lai 判斷a值是否等於b值,類似的還有!= ,<、>、>=等。
    這些操作符最後返回true或false.
  • java 不允許將一個數字作爲布爾值來用,如0假,非零真,雖然這在C中是允許的。

3.if-else

  • if-else,其中else是可選的。
    		if (Boolean-expression) 
    			statement

    if的括號內必須有一個Boolean 結果,可能是由布爾表達式產生的。statement指用分號結尾的簡單語句,或符合語句
    ——封閉在{}內的一組簡單語句。
  • else if()語句,並非新的關鍵字,僅僅是else後面緊跟另一個新的if語句。
  • 儘管java和C和C++一樣,是“格式自由”語言,但還是習慣上將流程控制語句的主體部分縮進排列,方便閱讀代碼。

4.迭代

  • while、do-while、和for用來控制循環,有時將他們劃分爲“迭代語句”
    語句會重複執行,知道其控制作用的“布爾表達式”得到“假”的結果爲止。

     4.1while語句

  • 		while (Boolean-expression) 
    			statement
    ()內的Boolean值爲假時循環停止

     4.2do-while

  • while和do-while唯一的區別就是do-while中的語句至少會執行一次,即便表達式第一次就被計算爲false。
  • 實際運用中,while被do-while更常用一些。
    		do
    			statement
    		while(Boolean-expression);

    4.3for

  • for循環是最常用的迭代形式,在第一次迭代之前要進行初始化,隨後它會進行條件測試,每一次迭代結束時,進行某種形式的“步進”,就是類似於i++的操作。
    		for (initialization; Boolean-expression; step) 
    			statement

    初始化(initialization)表達式、布爾表達式(Boolean-expression)、或者步進(step),都可以爲空
  • 每次迭代前都會進行測試布爾表達式,如果獲得的結果是false,就會跳出循環,執行for語句後面的代碼。
    		for (int i = 0; i < array.length; i++) {
    			
    		}

    注意i,它的作用域只是for作用域內。
  • 在java和c++中,可以在整個塊(如類的作用域)的範圍內分散變量聲明,在需要的地方加以定義或初始化。

     4.4逗號操作符和逗號分隔符

  • 逗號分隔符用來分隔函數(方法)參數列表的不同參數的。
  • java裏唯一用到逗號操作符的地方就是for循環的控制表達式。
  • 在控制表達式的初始化和步進步進部分可以使用一系列的逗號分隔的語句,而且這些語句都會獨立的執行
    		for (int i = 0,j = i + 10; i < 5; i++,j = i * 2) {
    			
    		}

    在一個控制表達式中,定義多個變量的這種能力只限於for循環適用,在其他任何選擇或迭代語句中都不能使用這種方式。
  • 初始化部分可以用任意數量的同一類型的定義。

     4.5Forreach語法

  • java se5引入的新的更加簡潔的for語法用於數組和容器。表示不必創建int變量去對由訪問項構成的序列進行計數,forreach將自動產生每一項。
    		for (char c : "An African Swallow".toCharArray()) {
    			
    		}

    將數組的每一個值都賦給c一遍,直到遍歷整個數組。

5.return 無條件分支

  • 在java中有多個關鍵字表示無條件,它們只是表示這個分支無需任何測試即可發生。
    這些關鍵字包括return、break、continue和一種與其他語言類似的跳轉到標號語句的方式(switch)。
  • return 語句有兩種用途:1.制定一個方法返回什麼值(假設它沒有void返回值),2.會導致當前方法退出,並返回那個值,如果是void的話,就不需要return,但其實這個方法返回了一個null(隱式的),即return null;

6.break 和 continue

  • 在任何迭代語句的主體部分,都可用break和continue控制循環的流程。
  • break退出循環,不在執行循環中剩餘的語句。
  • continue則是停止執行當前的迭代,然後退回循環起始處,開始下一次迭代。

7.無限循環的方式

  1. while(true)
  2. for(;;)
  3. 然而,在強大的無限循環都可以使用break來終止其循環。

8.goto語句

  • 編程語言一開始就有goto關鍵字,事實上,goto起源於彙編語言的控制流程
    “若條件A成立,則跳到這裏,否則,跳到那裏”。
  • 在goto濫用的程序裏,程序總是從一個地方跳到另一個地方,還有什麼辦法能夠識別程序的控制執行的流程呢。
    最好的辦法是在改用的地方用goto,不該用的地方不要用,
  • 在少數情況下,goto還是組織控制流程的最佳手段。
  • goto是java中的一個保留字,但在語言中並沒有使用它;java中沒有goto.

9.標籤機制

  • 標籤是後面跟有冒號的標識符。如label:
  • 在java中,標籤起作用的唯一地方剛好是在迭代語句之前。“剛好之前”是指在迭代語句和標籤之間插入任何語句都不好。
  • 設置標籤的唯一理由是:在其中嵌套另一個迭代或者一個開關。 如跳出當前循環而到另一個循環
    		for (char c : "An African Swallow".toCharArray()) {
    			for (int i = 0; i < array.length; i++) {
    				System.out.println("跳出");
    				break;
    			}
    		}

10.switch語句

  • 有時switch語句被劃歸爲一種選擇語句。switch 可以從一系列選擇中選出一條選擇來執行。

    如上代碼,如果i==1則執行1 case塊,如果2,則執行2,塊,都不是,則執行default塊。
    		switch (i) {
    		case 1:
    			
    			break;
    		case 2:
    			
    		    break;
    
    		default:
    			
    //			break;//此處可以註釋掉,因爲執行流程已經到了break的跳轉目的地
    		}

11.總結

  • 大多數語言都具有的基本特性:運算、操作符有限級、類型轉換、以及循環





發佈了26 篇原創文章 · 獲贊 14 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章