Java基礎:語言特性與基本語法
1. 簡介
Java 是一種廣泛使用的程式設計語言,自 1995 年由 Sun Microsystems 公司發布以來,已經成為全球最受歡迎的程式設計語言之一。Java 的發展歷程充滿創新,從最初的 JDK 1.0 到現在的23,每個版本都帶來了新的特性和改進。
Java 的重要特性包括:
- 跨平台性:「一次編寫,到處執行」的理念。
- 物件導向:封裝、繼承和多型等物件導向概念。
- 強型別:嚴格的編譯時期和執行時期類型檢查。
- 自動記憶體管理:使用垃圾回收機制,減輕開發者的負擔。
- 豐富的標準函式庫:提供大量可重用的程式碼。
2. Java的基本語言特性
Java 擁有許多獨特的語言特性,以下是 Java 的幾個關鍵特性:
-
物件導向: Java 是一種純物件導向的程式設計語言。除了基本資料型別外,Java 中的一切都是物件。這種設計促進了程式碼的重用性、可維護性和擴展性。Java 支援封裝、繼承和多型等物件導向的核心概念。
-
平台獨立性: Java 的「一次編寫,到處執行」理念是通過 Java 虛擬機器(JVM)實現的。Java 程式碼首先被編譯成位元組碼,然後可以在任何安裝了 JVM 的平台上執行。這大大提高了 Java 程式的可移植性。
-
安全性: Java 設計時就考慮到安全性。它提供安全管理器、存取控制器和類別載入器等機制,以確保程式碼的安全執行。此外,Java 沒有指標概念(這是另外的話題@Unsafe -- XD),避免了許多與記憶體相關的安全問題。
-
多執行緒支援: Java 內建對多執行緒程式設計的支援。它提供了同步機制和執行緒間通信的工具,使開發者能夠輕鬆創建高效能的並行應用程式。
-
自動記憶體管理: Java 使用垃圾回收機制自動管理記憶體。這消除了手動記憶體管理的需求,減少了記憶體洩漏和其他相關錯誤的可能性。
-
強型別: Java 是一種強型別語言,所有變數都必須先宣告後使用。這有助於在編譯時期捕獲錯誤,提高程式的穩定性。
這些特性使 Java 成為一個強大、安全且靈活的程式設計語言,適用於各種應用場景,從小型應用程式到大型企業系統。
3. Java程式的基本結構
Java 程式的基本結構包含幾個關鍵元素:類別、主方法和套件。讓我們詳細了解這些元素:
-
類別(Class): 在 Java 中,類別是程式的基本單位。每個 Java 程式至少包含一個類別。類別是物件的藍圖,定義了物件的屬性和行為。
-
主方法(Main Method): 主方法是 Java 應用程式的入口點。當你執行一個 Java 程式時,JVM 會首先尋找並執行主方法。主方法必須是公開的(public),靜態的(static),沒有回傳值(void),並且接受一個字串陣列作為參數。
-
套件(Package): 套件用於組織和管理相關的類別。它們提供了一種命名空間機制,幫助避免命名衝突,並提高程式的可維護性。
以下是一個基本的 Java 程式結構示例:
package com.example.myapp; // 套件宣告
public class HelloWorld { // 類別宣告
public static void main(String[] args) { // 主方法
System.out.println("Hello, World!"); // 程式邏輯
}
}
在這個例子中:
- package com.example.myapp;
宣告了這個類別所屬的套件。
- public class HelloWorld
定義了一個名為 HelloWorld 的公開類別。
- public static void main(String[] args)
是程式的主方法。
- System.out.println("Hello, World!");
是實際執行的程式邏輯,這裡是輸出一行文字。
理解這個基本結構對於開始 Java 程式設計至關重要。隨著你的學習深入,你會發現 Java 程式可以變得更加複雜,但這個基本結構始終是核心。
4. 資料型別與變數
在 Java 中,資料型別和變數是程式設計的基礎。Java 是一種強型別語言,這意味著所有變數都必須在使用前宣告其型別。Java 的資料型別分為兩大類:基本資料型別和參考資料型別。
基本資料型別
Java 有 8 種基本資料型別:
- 整數型別:byte(8位元)、short(16位元)、int(32位元)、long(64位元)
- 浮點數型別:float(32位元)、double(64位元)
- 字元型別:char(16位元)
- 布林型別:boolean
參考資料型別
參考資料型別包括列舉 (enum)、介面 (interface)、介面、陣列 (Array)、自定義的類別 (class)等。最常用的參考型別是 String(字串)。
變數宣告與初始化
在 Java 中,變數的宣告語法為:
以下是一些變數宣告和初始化的例子:
// 基本資料型別
int age = 25;
double salary = 50000.50;
char grade = 'A';
boolean isStudent = true;
// 參考資料型別
String name = "張小明";
int[] numbers = {1, 2, 3, 4, 5};
型別轉換
Java 支援兩種型別轉換:隱式轉換(自動轉換)和顯式轉換(強制轉換)。
-
隱式轉換:當較小的型別轉換為較大的型別時,可以自動進行。 例如:
int x = 10; long y = x;
-
顯式轉換:當較大的型別轉換為較小的型別時,需要明確指定。 例如:
double x = 10.5; int y = (int) x;
了解並正確使用這些資料型別和變數是編寫高品質 Java 程式的基礎。在實際編程中,選擇適當的資料型別可以提高程式的效能和可讀性。
5. 運算子與運算式
Java 提供了豐富的運算子,用於執行各種運算。理解這些運算子對於編寫有效的 Java 程式至關重要。以下是 Java 中主要的運算子類型:
算術運算子
用於執行基本的數學運算: - 加法 (+) - 減法 (-) - 乘法 (*) - 除法 (/) - 取餘數 (%)
範例:
int a = 10, b = 3;
System.out.println("a + b = " + (a + b)); // 輸出:13
System.out.println("a % b = " + (a % b)); // 輸出:1
比較運算子
用於比較兩個值: - 等於 (==) - 不等於 (!=) - 大於 (>) - 小於 (<) - 大於等於 (>=) - 小於等於 (<=)
範例:
邏輯運算子
用於組合布林表達式: - 與 (&&) - 或 (||) - 非 (!)
範例:
boolean a = true, b = false;
System.out.println("a && b: " + (a && b)); // 輸出:false
System.out.println("a || b: " + (a || b)); // 輸出:true
位元運算子
用於執行位元級別的運算: - 位元與 (&) - 位元或 (|) - 位元異或 (^) - 位元反轉 (~) - 左移 (<<) - 右移 (>>) - 無符號右移 (>>>)
範例:
int a = 5, b = 3;
System.out.println("a & b: " + (a & b)); // 輸出:1
System.out.println("a << 1: " + (a << 1)); // 輸出:10
賦值運算子
用於給變數賦值: - 簡單賦值 (=) - 加法賦值 (+=) - 減法賦值 (-=) - 乘法賦值 (*=) - 除法賦值 (/=) - 取餘數賦值 (%=)
範例:
6. 控制流程
控制流程是程式設計中的基本概念,決定程式的執行順序。Java 有多種控制流程結構,以下是 Java 中主要的控制流程結構:
if-else 條件判斷
用於根據條件執行不同的程式碼區塊。
int score = 85;
if (score >= 90) {
System.out.println("優");
} else if (score >= 80) {
System.out.println("良");
} else if (score >= 70) {
System.out.println("普通");
} else {
System.out.println("需要改進");
}
switch 陳述句
用於多重條件判斷,特別適合處理多個離散值的情況。
int dayOfWeek = 3;
switch (dayOfWeek) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
// ... 其他情況
default:
System.out.println("無效的日期");
}
for 迴圈
用於已知迭代次數的情況。
while 迴圈
用於不確定迭代次數,但知道結束條件的情況。
do-while 迴圈
類似 while 迴圈,但保證至少執行一次。
跳轉陳述句
- break:用於跳出迴圈或 switch 陳述句
- continue:用於跳過當前迭代,繼續下一次迭代
- return:用於從方法中返回,並可選擇性地返回一個值
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue; // 跳過 5
}
if (i == 8) {
break; // 在 8 時結束迴圈
}
System.out.println(i);
}
7. 陣列
陣列是 Java 中用於儲存多個相同類型元素的資料結構,以下是關於 Java 陣列的重要概念:
一維陣列
一維陣列是最基本的陣列類型,是一個線性的資料集合。
宣告和初始化一維陣列:
// 宣告
int[] numbers;
// 宣告並指定大小
int[] scores = new int[5];
// 宣告並初始化
int[] ages = {25, 30, 35, 40, 45};
存取陣列元素:
多維陣列
Java 支援多維陣列,最常見的是二維陣列。
宣告和初始化二維陣列:
// 宣告
int[][] matrix;
// 宣告並指定大小
int[][] grid = new int[3][3];
// 宣告並初始化
int[][] points = {{1, 2}, {3, 4}, {5, 6}};
存取二維陣列元素:
陣列的常用操作
-
獲取陣列長度:
-
遍歷陣列:
-
使用增強型 for 迴圈(for-each):
-
複製陣列:
-
排序陣列:
陣列是 Java 程式設計中的基礎概念,需要注意的是,Java 的陣列是固定大小的。如果需要動態大小的資料結構,可以考慮使用 Java 集合框架中的 ArrayList 或 LinkedList。
8. 方法
方法是 Java 中執行特定任務的程式碼區塊。它們是物件導向程式設計的核心元素,提供了程式碼重用和模組化的機制。以下是關於 Java 方法的重要概念:
方法的定義與呼叫
方法的基本結構:
範例:
public static int add(int a, int b) {
return a + b;
}
// 呼叫方法
int result = add(5, 3);
System.out.println("結果:" + result); // 輸出:結果:8
參數傳遞
Java 使用「傳值」的方式傳遞參數。對於基本型別,傳遞的是值的副本;對於物件,傳遞的是參考的副本。
public static void modifyValues(int x, int[] arr) {
x = 100; // 不會影響原始變數
arr[0] = 100; // 會影響原始陣列
}
int num = 10;
int[] numbers = {1, 2, 3};
modifyValues(num, numbers);
System.out.println(num); // 輸出:10
System.out.println(numbers[0]); // 輸出:100
回傳值
方法可以回傳一個值,或者使用 void 表示不回傳任何值。
public static String greet(String name) {
return "你好," + name;
}
public static void printGreeting(String name) {
System.out.println("你好," + name);
}
方法重載
Java 支援方法重載,允許在同一個類別中定義多個同名但參數不同的方法。
public static int multiply(int a, int b) {
return a * b;
}
public static double multiply(double a, double b) {
return a * b;
}
int result1 = multiply(5, 3); // 呼叫 int 版本
double result2 = multiply(5.5, 3.2); // 呼叫 double 版本
可變參數
Java 允許方法接受不定數量的參數。