三、流程控制和陣列
1、switch語句
Java增強了switch語句的功能,允許switch語句的控制表示式是java.lang.String型別的變數或表示式,不能是StringBuffer或者StringBuilder這兩種字串型別。
總結:switch語句後的表示式資料型別只能是byte、short、char、int四種整數型別,String和列舉型別。
2、控制迴圈結構
(1)break語句不僅可以結束其所在的迴圈,還可以直接結束其外層迴圈。此時需要在break後面緊跟一個標籤,這個標籤用於標識一個外層迴圈。
public class BreakTest { public static void main(String[] args) { outer://外層標籤 for(int i = 0;i < 5;++i) { for(int j = 0;j < 3;++j) { if(j == 1) { break outer; } System.out.println("i的值是:" + i + " j的值是:" + j); } } } }
(2)continue後面也可以緊跟一個標籤,用於直接跳過標籤所標識迴圈的當次迴圈的剩下語句,重新開始下一次迴圈。
public class BreakTest { public static void main(String[] args) { outer://外層標籤 for(int i = 0;i < 5;++i) { for(int j = 0;j < 3;++j) { if(j == 1) { continue outer; } System.out.println("i的值是:" + i + " j的值是:" + j); } } } }
j無法超過1,每當j == 1的時候就會結束外層迴圈的當次迴圈,直接開始下一次迴圈。內層迴圈沒有機會執行完成。
3、陣列型別
Java語言是面向物件的語言,而類和類之間可以支援繼承關係,這樣可能產生一個數組裡可以存放多種資料型別的假象。
(1)什麼是陣列型別?
陣列本身也是一種引用型別。它儲存著一個指標,指向陣列元素,陣列元素存放在堆中。
(2)如何定義陣列型別?
java中有兩種定義方式,一是type[] arrayName;二是 type arrayName[]。推薦使用第一種,要將arrayName當成一個變數。定義陣列的時候不能指定陣列的長度。
(3)陣列如何進行初始化?
1)靜態初始化
arrayName - new type[]{ele1, ele2, ele3,...};
此時的type可以和定義時的type相同,也可以是定義陣列時所指定的type的子類。
type[] arrayName = {ele1, ele2, ele3,...};
也可以定義的時候就進行初始化。
2)動態初始化
arrayName = new type[length];
動態初始化只會指定陣列的長度,由系統為每個陣列元素指定初始值。
type[] arrayName = new type[length];
同樣的定義的時候就進行初始化。
(4)陣列的使用
1)所有的陣列都有一個length的屬性,通過這個屬性可以得到陣列的長度。
2)foreach的使用
語法格式:
for(type var:array|collection)
{
//var自動迭代訪問每一個元素
}
foreach迴圈會自動遍歷陣列和集合的每個元素。foreach迴圈中的變數相當於一個臨時變數,系統會把陣列元素依次賦給這個臨時變數,因此不能通過這個臨時變數來修改陣列元素的值。
(5)多維陣列
雖然java中有支援多維陣列的語法,但從陣列底層的執行機制上來看並沒有多維陣列。
多維陣列的定義和初始化:
type[][] arrName;
arrName = new type[length][];//相當於定義了length個type[]型別的變數
//靜態初始化
String[][] str = new String[][]{new String[3], new String[]{"hello"}};
(6)陣列的常用方法
在java中有一個Arrays的工具類,包含了一些陣列常用的方法。