介紹
這一篇是 Java 基本語法介紹的第二篇,我們要來繼續探討程式碼架構。
有效範圍
Java 使用 { } 來表示程式中某個範圍區塊,變數或物件的有效範圍 (scope) 會被限制在當時被宣告的區塊內,超出了該區塊則會被回收。
1 2 3 4 5 6 7 8 9 10 11
| public class Main { public static void main(String[] args) { int x = 10; { int x = 20; int y = 30; } System.out.println(x); System.out.println(y); } }
|
製作套件 Package
把特定功能的程式碼包裝成一個套件 (package),之後需要時可以直接拿來使用。
自訂套件
檔案位置:
1 2 3 4
| src/ └─ main/ └─ java/com/raylon/util/ └─ HelloUtil.java
|
內容:
1 2 3 4 5 6 7
| package com.raylon.util;
public class HelloUtil { public static void sayHello(String name) { System.out.println("Hello, " + name + "!"); } }
|
匯入套件
檔案位置:
1 2 3 4
| src/ └─ main/ └─ java/com/raylon/ └─ main.java
|
內容:
1 2 3 4 5 6 7
| import com.raylon.util.HelloUtil;
public class Main { public static void main(String[] args) { HelloUtil.sayHello("Java"); } }
|
流程控制
if 判斷
if … else …
1 2 3 4 5 6 7
| boolean isRaining = false;
if (isRaining) { System.out.println("Bring an umbrella!"); } else { System.out.println("No rain today, no need for an umbrella!"); }
|
if … else if … else …
1 2 3 4 5 6 7 8 9
| int weather = 2;
if (weather == 1) { System.out.println("Bring an umbrella."); } else if (weather == 2) { System.out.println("Wear sunglasses."); } else { System.out.println("Just go outside normally."); }
|
if 的簡寫
1 2 3
| int time = 20; String result = (time < 18) ? "Good day." : "Good evening."; System.out.println(result);
|
上述程式碼等同於
1 2 3 4 5 6
| int time = 20; if (time < 18) { System.out.println("Good day."); } else { System.out.println("Good evening."); }
|
switch 條件判斷
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int day = 4; switch (day) { case 1: System.out.println("Monday"); break; case 2: System.out.println("Tuesday"); break; case 3: System.out.println("Wednesday"); break; case 4: System.out.println("Thursday"); break; }
|
break
用來中斷迴圈。
1 2 3 4 5 6
| for (int i = 0; i < 5; i++) { if (i == 5) { break; } System.out.println("i=" + i); }
|
continue
跳過迴圈的這一步,執行下一步。
1 2 3 4 5 6
| for (int i = 0; i < 5; i++) { if (i == 3) { continue; } System.out.println("i=" + i); }
|
Loop 迴圈
For
1 2 3
| for (int i = 0; i < 10; i++) { System.out.print(" " + i); }
|
While
1 2 3 4 5 6
| int sum = 0, i = 2; while (i <= 100) { sum += i; i += 2; } System.out.println("1~100的偶數和(2+4+...+100)=" + sum);
|
Do … while
1 2 3 4 5
| int i = 1; do { System.out.println("這是第" + i + "次執行迴圈"); } while (i++ < 4); System.out.println("執行完畢,i 的值=" + i);
|
外覆類別 wrapper class
原生資料類型宣告的變數,只能存放一個內容值,並沒有具備屬性與方法。為了有效處理各個原生資料類型,Java 針對原生資料類型定義了對應的類別,讓它們有了方法可以使用。
| 型態 |
原生資料類型 |
外覆類別 |
| 整數 |
byte |
Byte |
| short |
Short |
| int |
Integer |
| long |
Long |
| 浮點數 |
float |
Float |
| double |
Double |
| 字元 |
char |
Character |
| 布林值 |
boolean |
Boolean |
宣告外覆類別。
1 2
| Integer myInt = 5; Double myDouble = 5.99;
|
宣告完,就可以使用外覆類別提供的方法,下表以 Integer 為例。
| 方法 |
功能 |
外覆類別.intValue() |
將外覆資料類型轉為原生資料型態 |
外覆類別.toString() |
將外覆資料類型轉為字串 |
外覆類別.valueOf(原生資料型態) |
將原生資料型態轉為外覆資料型態 |
字串類別 StringBuffer
StringBuffer 可以用來修改字串,對字串進行修改、新增、刪除等,對於需要多次修改字串內容時很有幫助。
如何建立字串類別。
| 建構子 |
說明 |
StringBuffer() |
預設可以儲存 16 字元的長度,當儲存資料超過 16 字元時會自動擴充。 |
StringBuffer(int length) |
指定儲存字元的長度。 |
StringBuffer(String str) |
將字串內容儲存為 StringBuffer 物件。 |
常用的方法統整:
| 方法 |
功能 |
append(object) |
新增字串或其他型態資料。 (object 可以是原生資料類型或 string 型態) |
capacity() |
取得 stringbuffer 儲存空間大小。 |
charAt(int index) |
取得字串內指定 index 的字元。 |
delete(int start, int end) |
刪除字串內開始位址到結束位址的內容。 |
deleteAt(int index) |
刪除字串內指定 index 的字元。 |
insert(int index, object) |
將物件內容加入字串的指定位址。 |
reverse() |
字串反轉。 |
setCharAt(int index, char) |
將字串內的指定 index 的字元替換為指定字元。 |
substring(int start) |
取得 stringbuffer 物件內容的 start 位址到底的內容。 |
substring(int start, int end) |
取得 stringbuffer 物件內容的 start 到 end 位址的內容。 |
toString() |
將 stringbuffer 物件轉換成一般的字串物件。 |
範例:
1 2 3 4
| StringBuffer myStringBuffer = new StringBuffer("Hello"); myStringBuffer.append(" World!"); myStringBuffer.insert(5, ","); System.out.println(myStringBuffer);
|
陣列 Array
可以用來儲存多個相同資料類型的資料。
1 2
| int[] num = new int[5]; int[] num2 = {73, 82, 66, 54, 23, 11};
|
在 Java 中的索引值都是從 0 開始。
有以下三種方式列出陣列內容: 使用索引值、使用迴圈輸出、使用內建方法。
使用索引
1 2
| int[] num = { 73, 82, 66, 54, 23, 11 }; System.out.println(num2[0]);
|
迴圈輸出
1 2 3 4
| int[] num = { 73, 82, 66, 54, 23, 11 }; for (int i = 0; i < num.length; i++) { System.out.println(num[i]); }
|
內建方法
1 2 3 4
| import java.util.Arrays;
int[] num = { 73, 82, 66, 54, 23, 11 }; System.out.println(Arrays.toString(num));
|
索引值超出範圍的錯誤
1 2
| int[] num = { 73, 82, 66, 54, 23, 11 }; System.out.println(num[6]);
|
會出現:
1
| Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 6
|
多維陣列
1 2
| int[][] score = new int [2][3]; System.out.println(Arrays.deepToString(score));
|
deepToString(): 使用遞迴的方式將內容轉換為 String。
陣列內建方法介紹
| 方法 |
功能 |
Arrays.equals(array1, array2) |
比較兩個陣列的內容是否相同。 |
Arrays.fill(array, value) |
將所有元素設定指定值。 |
Arrays.fill(array, start index, amount, value) |
將索引範圍內的元素填入指定值。 |
Arrays.binarySearch(array, value) |
在陣列中搜尋指定值。 |
Arrays.sort(array) |
排序陣列內容。 |
Arrays.toString(array) |
將陣列轉換為字串。 |
程式進入點接收的陣列參數
學到了陣列,我們就可以回來看程式的進入點。
1
| public static void main(String[] args) { }
|
String[]: 屬於 main 方法接收參數的類型。
args: 是參數名稱。
我們在執行程式時可以附帶參數,如下:
我們輸入的附加參數會以空格為間隔,儲存在 args 變數裡。
我們可以從以下程式碼驗證。
1 2 3
| public static void main(String[] args) { System.out.println(args.length); }
|
傳入的參數是以字串形式呈現,如果要進行計算則必須要轉換為數值資料格式。
動態陣列 ArrayList
ArrayList 與原生的 Array 差異在於,原生的陣列無法直接修改陣列大小,ArrayList 則可以隨時修改。
ArrayList 只能用來存放物件形式的資料類型,不支援原生資料類型 (例如: int, float, double 等)。
如何建立 ArrayList。
| 建構子 |
說明 |
ArrayList() |
建立一個空的 ArrayList 物件。 |
ArrayList(集合物件) |
將集合物件指定給 ArrayList 物件。 |
ArrayList(length) |
建立指定長度的 ArrayList 物件。 |
常用的方法統整:
| 方法 |
功能 |
回傳值類型 |
add(元素) |
將指定的元素加入 ArrayList 陣列的最後。 |
boolean |
add(index, 元素) |
插入元素至 ArrayList 陣列中索引指定的位置。 |
void |
clear() |
清除所有元素。 |
void |
contains(元素) |
判斷 ArrayList 陣列中是否有包含此元素。 |
boolean |
get(index) |
取得指定索引的元素。 |
object |
remove(index / object) |
移除指定索引的元素。 |
object |
set(index, 元素) |
將指定元素的內容取代。 |
object |
size() |
回傳 ArrayList 陣列中元素的數量。 |
int |
範例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple"); fruits.add("Banana"); fruits.add("Cherry");
fruits.add(1, "Mango");
System.out.println("第一個水果是: " + fruits.get(0));
fruits.set(2, "Grapes");
fruits.remove("Banana");
System.out.println("目前的清單: " + fruits);
System.out.println("共有 " + fruits.size() + " 個水果");
|