塊(即復合語句)是指由一對大括號括起來的若干條簡單的 Java 語句。塊確定了變量的作用域。一個塊可以嵌套在另一個塊中。但是,不能在嵌套的兩個塊中聲明同名的變量。使用塊(有時稱為復合語句)可以在Java程序結構中原本只能放置一條(簡單)語句的地方放置多條語句。
~
本篇主要記錄內容包括:塊作用域、分支結構、循環語句與、中斷控制流程語句
- 上一篇內容:Java基礎:Java數字類型
- 下一篇內容:Java基礎:Java類與對象
- 更多知識學習:全網最全的 Java 技術棧內容梳理(持續更新中)
文章目錄
- 一、Java 代碼塊
- 1、塊作用域
- 2、代碼塊分類
- 3、構造方法與代碼塊執行順序
- 二、Java 分支結構
- 1、條件語句
- 2、多重選擇:switch語句
- 3、三元運算符
- 三、Java 循環語句
- 1、while 循環語句與 do-while 語句
- 2、for 循環語句
- 3、foreach 循環語句
- 四、Java 中斷控制流程語句
一、Java 代碼塊
1、塊作用域
塊(即復合語句)是指由一對大括號括起來的若干條簡單的 Java 語句。塊確定了變量的作用域。一個塊可以嵌套在另一個塊中。但是,不能在嵌套的兩個塊中聲明同名的變量。
Ps:在 C++ 中,可以在嵌套的塊中重定義一個變量。在內層定義的變量會覆蓋在外層定義的變量。這樣,有可能會導致程序設計錯誤,因此在 Java 中不允許這樣做。
有名字的代碼塊—— if-else 代碼塊,for 循環代碼塊,main 方法代碼塊。代碼塊也叫體,比如 for 循環體,main 方法體。
2、代碼塊分類
根據代碼塊位置和聲明的不同,可以分為局部代碼塊,構造代碼塊,靜態代碼塊和同步代碼塊:
- 局部代碼塊:類中方法的方法體,局部代碼塊是定義在方法或語句中,方法和類都是以代碼塊的方式劃定邊界的;
- 構造代碼塊:定義在類中成員位置,方法之外的代碼塊,構造代碼塊會在創建對象時被調用,每次創建時都會被調用,優先于類構造函數執行。特點:①優先于構造方法執行,構造代碼塊用于執行所有對象均需要的初始化動作;②每創建一個對象均會執行一次構造代碼塊;
- 靜態代碼塊:用
static{}
包裹起來的代碼片段,只會執行一次,靜態代碼塊優先于構造塊執行。特點:①靜態代碼塊是定義在成員位置,方法之外,使用static
修飾的代碼塊;②它優先于主方法執行、優先于構造代碼塊執行,在類加載時執行;③該類不管創建多少對象,靜態代碼塊只執行一次;④可用于給靜態變量賦值,用來給類進行初始化; - 同步代碼塊:當線程開始執行同步代碼塊前,必須先獲得對同步代碼塊的鎖定,并且任何時刻只能有一個線程可以獲得對同步監視器的鎖定,當同步代碼塊執行完成后,該線程會釋放對該同步監視器的鎖定。
特點:①使用synchronized(){}
包裹起來的代碼塊;②在多線程環境下,對共享數據的讀寫操作是需要互斥進行的,否則會導致數據的不一致性;③同步代碼塊需要寫在方法中。
3、構造方法與代碼塊執行順序
B構造函數、父類B靜態代碼塊、父類B非靜態代碼塊、子類A構造函數、子類A靜態代碼塊、子類A非靜態代碼塊執行的先后順序是:
父類B靜態代碼塊>子類A靜態代碼塊>父類B非靜態代碼塊>父類B構造函數>子類A非靜態代碼塊>子類A構造函數父類B靜態代碼塊 > 子類A靜態代碼塊 > 父類B非靜態代碼塊 > 父類B構造函數 > 子類A非靜態代碼塊 > 子類A構造函數 父類B靜態代碼塊>子類A靜態代碼塊>父類B非靜態代碼塊>父類B構造函數>子類A非靜態代碼塊>子類A構造函數
二、Java 分支結構
1、條件語句
在 Java 中,條件語句的格式為: if(condition) statement
,這里的條件必須用括號括起來。
與絕大多數程序設計語言一樣,Java常常希望在某個條件為真時執行多條語句。在這種情況下,使用塊語句,格式為
{statement1statement2......
}
Ps:使用塊(有時稱為復合語句)可以在Java程序結構中原本只能放置一條(簡單)語句的地方放置多條語句。
其中 else 部分是可選的。else 子句與最鄰近的if構成一組。因此,在語句中 else 與第 2 個 if 配對。當然,用一對括號將會使這段代碼更加清晰:重復地交替出現 if...else if...
是一種很常見的情況。
2、多重選擇:switch語句
在處理多個選項時,使用 if/else 結構顯得有些笨拙。Java 有一個與 C/C++ 完全一樣的 switch 語句。
switch 語句將從與選項值相匹配的 case 標簽處開始執行直到遇到 break 語句,或者執行到 switch 語句的結束處為止。如果沒有相匹配的 case 標簽,而有 default 子句,就執行這個子句。
Ps:有可能觸發多個 case 分支。如果在 case 分支語句的末尾沒有 break 語句,那么就會接著執行下一個 case 分支語句。這種情況相當危險,常常會引發錯誤。
case 標簽可以是:① 類型為char、byte、short 或 int 的常量表達式。②枚舉常量。③從 Java SE 7 開始,case 標簽還可以是字符串字面量。
3、三元運算符
元運算符也叫三目運算符 ,即由三部分組成,格式:關系表達式 ? 表達式1:表達式2;
先執行關系表達式,看其結果是 true 還是 false:如果是 true,則執行表達式 1;如果是false,則執行表達式 2。
三、Java 循環語句
1、while 循環語句與 do-while 語句
當條件為 true 時,while 循環執行一條語句(也可以是一個語句塊)。一般格式為:while( condition ) statetion
,如果開始循環條件的值就為 flase,則 while 循環體一次也不執行。while循環語句首先檢測循環條件,因此,循環體中的代碼有可能不被執行。如果希望將語句至少執行一遍,則應該把檢測條件放在最后面,這就是 do-while 語句,它的格式大致為:do statement while (condition );
。
2、for 循環語句
for 循環語句是支持迭代的一種通用結構,利用每次迭代之后更新的計數器或類似的變量來控制迭代次數。
for 語句的第 1 部分通常用于對計數器初始化;第 2 部分給出每次新一輪循環執行前要檢測的循環條件;第 3 部分指示如何更新計數器。與 C++ 一樣,盡管 Java 允許在 for 循環的各個部分放置任何表達式,但有一條不成文的規則:for 語句的 3 個部分應該對同一個計數器變量進行初始化、檢測和更新。若不遵守這一規則,編寫的循環常常晦澀難懂。
3、foreach 循環語句
Java 有一種功能很強的循環結構,可以用來依次處理數組中的每個元素(其他類型的元素集合亦可)而不必為指定下標值而分心,語句格式為:for(variable:collection) statement
。
for each 循環語句相較于傳統的 for 循環更加簡介、更不易出錯(不必為下標的起始值和終止值而操心)
Ps:要想獲得數組中的元素個數,可以使用 array.length。
Ps:for each 循環語句的循環變量將會遍歷數組中的每個元素,而不需要使用下標值。
四、Java 中斷控制流程語句
break 關鍵字:break 主要用在循環語句或者 switch 語句中,用來跳出整個語句塊。 break 跳出最里層的循環,并且繼續執行該循環下面的語句。
continue 關鍵字: continue 適用于任何循環控制結構中。作用是讓程序立刻跳轉到下一次循環的迭代。①在 for 循環中, continue 語句使程序立即跳轉到更新語句。②在 while 或者 do…while 循環中,程序立即跳轉到布爾表達式的判斷語句。
跳出控制語句的區別:
- break :結束當前整個循環,執行當前循環下邊的語句;
- continue :結束本次循環,繼續進行下次循環;
- return : 用于結束一個方法,返回給上層調用者,如果位于main方法內,相當于結束了程序,return 也可以用于結束循環,因為 return 用于結束一個方法,如果方法中有循環的話,不管 return 嵌套于多少層循環之內,循環都結束不會再執行循環后面的語句。