1. 程式人生 > >Java程式設計拾遺『控制流程』

Java程式設計拾遺『控制流程』

與任何程式設計語言一樣,Java使用條件語句和迴圈結構確定控制流流程。

1. 條件語句

條件語句就是使用if進行條件判斷,及邏輯處理,主要包含以下幾種形式。

1.1 if

單if條件語句格式如下:

if (condition) {
	statement;
}

如果布林表示式condition為真,則執行statement語句。

1.2 if……else

if……else條件語句格式如下:

if (condition) {
	statement1;
} else {
	statement2;
}

如果布林表示式condition為真,則執行statement語句,否則執行statement語句。

1.3 if……else if……else

if……else if……else條件語句格式如下:

if (condition) {
	statement1;
} else if (condition1) {
	statement2;
} else {
	statement3;
}

如果布林表示式condition為真,則執行statement1語句,條件語句結束。否則判斷condition1是否為真,如果為真則執行statement2語句。如果condition與condition都不為真,則執行statement語句。else if條件可以有多個,一旦從上到下其中一個布林表示式檢測為 true,則執行該布林表示式的語句,其他的 else if 以及 else 語句都將跳過執行。假如所有的布林表示式都為false,則最終執行else中的語句。

1.4 巢狀的if…else

if語句中可以隨意巢狀其它格式的條件語句,但是建議最好不要巢狀太多曾,不然程式碼可讀性會比較差。

if(condition1) {
	statement1;
    if(condition1) {
    	statement2;
   }
}

2. 迴圈語句

Java中存在一下三種主要的迴圈結構,for迴圈結構、while迴圈結構、do…while迴圈結構。對於這三種迴圈結構,熟悉C/C++的人應該很清楚它們的語義。迴圈結構主要用於迴圈處理控制。

2.1 for迴圈

for迴圈主要存在三種形式,如下:

2.1.1 普通for迴圈

for(initialization; boolean-expression; step) {
    statement;
}
  • 最先執行initialization。可以宣告一種型別,初始化一個或多個迴圈控制變數,也可以是空語句。
  • 然後,檢測boolean-expression的值。如果為 true,迴圈體被執行。如果為false,迴圈終止,開始執行迴圈體後面的語句。
  • 執行一次迴圈後,根據step更新迴圈控制變數。
  • 再次檢測布林表示式。迴圈執行上面的過程。

2.1.2 增強for迴圈

Java5中引入了一種主要用於陣列或者實現了Iterable介面的類物件的增強型for迴圈,用來依次處理陣列中的每一個元素,而不用指定具體的陣列角標。

for(type variable-name : collection) {
    statement;
}

增強for迴圈丟掉了索引資訊,當遍歷集合或陣列時,如果需要訪問集合或陣列的下標,只能使用普通for迴圈。

2.1.3 Java8 forEach迴圈

Java8中結合Lambda表示式,引入一種新的for迴圈,用於實現了Iterable介面的類物件的迴圈遍歷,forEach方法是集合父介面java.lang.Iterable中新增的一個default實現方法。不瞭解Lambda表示式的同學可以參考我之前的一篇文章 Java8函數語言程式設計

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}

2.2 while迴圈

while迴圈是最基本的迴圈結構,結構為:

while(boolean-expression) {
	statement;
}

只要布林表示式為true,迴圈就會一直執行下去。假如第一次判斷布林表示式就為false,那麼迴圈體一次都不會被執行

2.3 do…while迴圈

do…while 迴圈和 while 迴圈相似,不同的是,對於while迴圈而言,如果布林表示式條件,則不能進入迴圈體,而do…while迴圈至少會執行一次迴圈體。

do {
	statement;
}while(boolean-expression);

2.4 迴圈流程控制

在進行迴圈時,有時候需要根據一定的條件終止迴圈。Java提供兩種方式終止迴圈,分別是break和continue。

2.4.1 break

break用於中斷當前迴圈,存在兩種形式,一種是單break形式,另一種是break label形式。區別在於break只能中斷當前迴圈,而不能終端外層迴圈,如果想中斷外層迴圈,只能通過break label的方式。

2.4.1.1 break

@Test
public void breakTest(){
    for (int i = 0; i < 3; i++) {
        System.out.println(String.format("start outer for loop index %d", i));
        for (int k = 0; k < 3; k++) {
            if (k == 1){
                break;
            }
            System.out.println(String.format("inner loop index %d", k));
        }
        System.out.println(String.format("end outer for loop index %d", i));
    }
    System.out.println("loop end");
}

執行結果:

start outer for loop index 0
inner loop index 0
end outer for loop index 0
start outer for loop index 1
inner loop index 0
end outer for loop index 1
start outer for loop index 2
inner loop index 0
end outer for loop index 2
loop end

可以看出break中斷了內層迴圈,但是外層迴圈依然可以正常執行

2.4.1.2 break label

C++中有一個goto關鍵字,可以將邏輯跳轉到相應的label。Java中goto只是一個保留字,並不是關鍵字,也沒有相應的語義。但在java中可以通過break label達到類似的效果。

@Test
public void breakLabelTest(){
    BREAK_LABEL:
    for (int i = 0; i < 3; i++) {
        System.out.println(String.format("start outer for loop index %d", i));
        for (int k = 0; k < 3; k++) {
            if (k == 1){
                break BREAK_LABEL;
            }
            System.out.println(String.format("inner loop index %d", k));
        }
        System.out.println(String.format("end outer for loop index %d", i));
    }
    System.out.println("loop end");
}

執行結果:

start outer for loop index 0
inner loop index 0
loop end

可以看出break BREAK_LABEL中斷了外層迴圈。

2.4.2 continue

break會中斷離break關鍵字最近的迴圈體的迴圈,而continue只會終止本次迴圈,並進行本迴圈體的下一次迴圈。另外,跟break相似,continue也有兩種形式,一種是單continue形式,另一種是continue label形式。

2.4.2.1 continue

@Test
 public void continueTest(){
     for (int i = 0; i < 3; i++) {
         System.out.println(String.format("start outer for loop index %d", i));
         for (int k = 0; k < 3; k++) {
             if (k == 1){
                 continue;
             }
             System.out.println(String.format("inner loop index %d", k));
         }
         System.out.println(String.format("end outer for loop index %d", i));
     }
     System.out.println("loop end");
 }

執行結果:

start outer for loop index 0
inner loop index 0
inner loop index 2
end outer for loop index 0
start outer for loop index 1
inner loop index 0
inner loop index 2
end outer for loop index 1
start outer for loop index 2
inner loop index 0
inner loop index 2
end outer for loop index 2
loop end

可以看出continue終止了k==1時的內層迴圈

2.4.2.2 continue label

@Test
public void continueLabelTest(){
    CONTINUE_LABEL:
    for (int i = 0; i < 3; i++) {
        System.out.println(String.format("start outer for loop index %d", i));
        for (int k = 0; k < 3; k++) {
            if (k == 1){
                continue CONTINUE_LABEL;
            }
            System.out.println(String.format("inner loop index %d", k));
        }
        System.out.println(String.format("end outer for loop index %d", i));
    }
    System.out.println("loop end");
}

執行結果:

start outer for loop index 0
inner loop index 0
start outer for loop index 1
inner loop index 0
start outer for loop index 2
inner loop index 0
loop end

“end outer for loop index”這一行沒有列印,說明continue label終止了外層迴圈,並進行下一次迴圈。

3. switch語句

switch語句看一看作一種特殊的條件語句,這裡在控制流程中順帶講述一下。

switch(expression){
    case value1 :
       statement1;
       break; //可選
    case value :
       statement2;
       break; //可選
    //可以有任意數量的case語句
    default : //可選
       statement3;
}
  • switch 語句中的變數型別可以是: byte、short、int 或者 char。從 Java SE 7 開始,switch 支援字串 String 型別了,同時 case 標籤必須為字串常量或字面量。
  • switch 語句可以擁有多個 case 語句。每個 case 後面跟一個要比較的值和冒號。
  • case 語句中的值的資料型別必須與變數的資料型別相同,而且只能是常量或者字面常量。
  • 當變數的值與 case 語句的值相等時,那麼 case 語句之後的語句開始執行,直到 break 語句出現才會跳出 switch 語句。
  • 當遇到 break 語句時,switch 語句終止。程式跳轉到 switch 語句後面的語句執行。case 語句不必須要包含 break 語句。如果沒有 break 語句出現,程式會繼續執行下一條 case 語句,直到出現 break 語句。
  • switch 語句可以包含一個 default 分支,該分支一般是 switch 語句的最後一個分支(可以在任何位置,但建議在最後一個)。default 在沒有 case 語句的值和變數值相等的時候執行。default 分支不需要 break 語句。

相關推薦

Java程式設計拾遺控制流程

與任何程式設計語言一樣,Java使用條件語句和迴圈結構確定控制流流程。 1. 條件語句 條件語句就是使用if進行條件判斷,及邏輯處理,主要包含以下幾種形式。 1.1 if 單if條件語句格式如下: if (condition) { statement; } 如果

Java程式設計拾遺陣列

陣列是同一種類型資料的集合,其實就是一個容器,Java中提供的陣列是用來儲存固定大小的同類型元素,其中元素可以是基本型別也可以是物件型別。 1. 陣列建立 Java中陣列存在兩種宣告方式,以int陣列為例: int[] a; int a[]; Java中建議使用第一種風格,可以將陣列

Java程式設計拾遺運算子

與C、C++相似,Java中也存在多種運算子,對資料進行處理,且運算子型別跟C、C++有著極大的相似性。比如,用於賦值的賦值運算子、用於運算的算數運算子和自增自減運算子、用於比較的關係運算符,用於邏輯運算的邏輯運算子、用於位運算的位運算子和移位操作符、複合三元操作符等。本篇文章將簡單講述一下Java

Java程式設計拾遺介面與抽象類

上篇文章講了Java中類和物件的一些基礎概念,本篇文章講述一下,Java中兩種特殊的”類”,介面和抽象類。熟悉Java程式設計的都知道,Java中是不允許多繼承的,有人講Java中可以通過介面實現多繼承,但其實這種說法是不對的,Java之父James Gosling在1995

Java程式設計拾遺Java概述

Java是一種廣泛使用的計算機程式語言,擁有跨平臺、面向物件、泛型程式設計的特性,廣泛應用於企業級Web應用開發和移動應用開發。 1. Java語言概述 任職於Sun的Jams Gosling等人於1990年代初開發Java語言的雛形,最初被命名為Oak,目標設定在家用電

java程式設計思想之控制執行流程

java 使用了c的所有流程控制語句,涉及的關鍵字包括 if-else、while、do - while 、for 、 return 、break以及選擇語句switch。 1、true和false 所有條件語句都利用條件表示式的真或假來決定執行路徑 2、 if - elseif -

Java程式設計思想_控制執行流程

    return:指定一個方法返回什麼值(假設它沒void返回值);導致當前方法退出,並返回那個值。    break和continue:break用於強行退出迴圈,不執行迴圈中剩餘的語句;                                   contin

JAVA程式設計119——事務控制/動態代理/程式碼優化

一、優化方案:將代理類單獨抽取出來封裝成為一個代理工廠 package com.mollen.config; import com.mollen.utils.TransactionManager; import net.sf.cglib.proxy.Enhancer; import n

JAVA程式設計118——事務控制/動態代理

一、目錄結構 二、資料庫結構及測試資料 三、程式碼詳解 1、xml配置檔案:pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.or

Java程式設計拾遺

在學校時,從未接觸過Java程式設計相關的東西,開始工作的前半年多的時間亦然。後來一些偶然的原因,我做了個決定,做一名Java程式設計師。在計算機這個領域,非常盛行這麼一句話,程式設計都是相通的,當你熟悉一門開發語言之後,再去轉其他語言是很簡單的。但是我當時從零開始學Java

JAVA 程式設計題解與上機指導(第四版)第三章表達式和流程控制語句 題3.9

/**3.9編寫列印乘法口訣表*/ public class MultipleTable { public static void main(String args[]) {MultipleTable multiple=new MultipleTable(); int n=

Java程式設計思想----控制執行流程

1,if-else結構 if-else結構我們可以將其理解為是一種條件判斷語句,當滿足其中一個分支結構的boolean判斷條件的時候就執行這個分支的語句,但不再執行剩下分支的條件哪怕是滿足條件的時候,所以我們在使用if-else結構的時候都將判斷域切分成幾個互不相交的集合來構建相應的分支結構。

Java程式設計思想學習(四)----第四章:控制執行流程

  在Java中,涉及的關鍵字包括if-else、while、do-while、for、return、break 以及選擇語句switch。然而,Java並不支援goto語句(該語句引起許多反對意見,但它仍是解決某些特殊問題的最便利的方法)。在Java中,仍然可以進行類似goto那樣的跳轉,但比起典型的got

Java程式設計思想第四版-第四章(控制執行流程 )筆記

                                               第四章 控制執行流程 有一定java基礎的其實這一章節都懂的。。。。主要記一些細節。(斷句,和switch的 用法。) if- else  while    do-while  

java程式設計思想》第四章:控制執行流程

在java中要使用執行控制語句來做出判斷。 流程控制關鍵詞:if、if-else、while、do-while、for、return、break、continue、switch。 break:跳出整個迴圈。 continue:跳出本次迴圈進入下一次迴圈。 return:既可

Java 程式設計思想—— 第四章 控制執行流程

         就像有知覺的生物一樣,程式必須在執行過程中控制他的世界,並做出選擇。在Java中你要使用執行控制語句來做出選擇。          1. true和false   Java不允許將一

Java程式設計思想筆記】第四章-流程控制

Foreach迴圈可用於陣列,以及實現了java.util.Iterator介面的物件。 public interface Iterable<T> { Iterator<T> iterator(); } 如果在返回v

Java程式設計思想第四版讀書筆記——第四章 控制執行流程

Java程式設計思想第四版第四章讀書筆記——控制執行流程。因為有些C++和android開發基礎,所以基礎知識筆記就不寫了,記些特別的需要注意的地方。 第四章 控制執行流程 1.true和false Java不允許我們將一個數字作為布林值使用,雖然這在C和C++裡是

java入門(4)--流程控制

clas 程序 生命 blog 括號 java入門 語言 註入 class 選擇 程序如果只是逐條地順序執行,那程序的行為恐怕要簡單得多了,但也會失去大部分的強悍功能和精彩。 正是“分支”打破了順序執行的呆板局面,給程序註入了真正的生命力。 java中的分支主要由 選擇 和

中級篇docker之CI/CD持續集成-整個流程串聯(75)

imageview upload 分支合並 build 不能 開始 ref 開發人員 orien >原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!>原文鏈接地址:『中級篇』docker之CI/CD持續集成-整個流程串聯(75) 前面主要說了CI py