Java教程
- Java - 首頁
- Java - 概述
- Java - 歷史
- Java - 特性
- Java vs. C++
- JVM - Java虛擬機器
- Java - JDK、JRE和JVM的區別
- Java - Hello World程式
- Java - 環境搭建
- Java - 基本語法
- Java - 變數型別
- Java - 資料型別
- Java - 型別轉換
- Java - Unicode系統
- Java - 基本運算子
- Java - 註釋
- Java - 使用者輸入
- Java - 日期和時間
Java控制語句
- Java - 迴圈控制
- Java - 決策
- Java - if-else語句
- Java - switch語句
- Java - for迴圈
- Java - foreach迴圈
- Java - while迴圈
- Java - do-while迴圈
- Java - break語句
- Java - continue語句
面向物件程式設計
- Java - 面向物件程式設計概念
- Java - 物件和類
- Java - 類屬性
- Java - 類方法
- Java - 方法
- Java - 變數作用域
- Java - 建構函式
- Java - 訪問修飾符
- Java - 繼承
- Java - 聚合
- Java - 多型
- Java - 方法重寫
- Java - 方法過載
- Java - 動態繫結
- Java - 靜態繫結
- Java - 例項初始化塊
- Java - 抽象
- Java - 封裝
- Java - 介面
- Java - 包
- Java - 內部類
- Java - 靜態類
- Java - 匿名類
- Java - 單例類
- Java - 包裝類
- Java - 列舉
- Java - 列舉建構函式
- Java - 列舉字串
Java內建類
Java檔案處理
Java錯誤和異常
- Java - 異常
- Java - try-catch塊
- Java - try-with-resources語句
- Java - 多重catch塊
- Java - 巢狀try塊
- Java - finally塊
- Java - throw異常
- Java - 異常傳播
- Java - 內建異常
- Java - 自定義異常
Java多執行緒
- Java - 多執行緒
- Java - 執行緒生命週期
- Java - 建立執行緒
- Java - 啟動執行緒
- Java - 執行緒連線
- Java - 執行緒命名
- Java - 執行緒排程器
- Java - 執行緒池
- Java - 主執行緒
- Java - 執行緒優先順序
- Java - 守護執行緒
- Java - 執行緒組
- Java - 關閉鉤子
Java同步
Java網路程式設計
- Java - 網路程式設計
- Java - Socket程式設計
- Java - URL處理
- Java - URL類
- Java - URLConnection類
- Java - HttpURLConnection類
- Java - Socket類
- Java - 泛型
Java集合
Java介面
Java資料結構
Java集合演算法
高階Java
- Java - 命令列引數
- Java - Lambda表示式
- Java - 傳送郵件
- Java - Applet基礎
- Java - Javadoc註釋
- Java - 自動裝箱和拆箱
- Java - 檔案不匹配方法
- Java - REPL (JShell)
- Java - 多版本Jar檔案
- Java - 私有介面方法
- Java - 內部類菱形運算子
- Java - 多解析度影像API
- Java - 集合工廠方法
- Java - 模組系統
- Java - Nashorn JavaScript
- Java - Optional類
- Java - 方法引用
- Java - 函式式介面
- Java - 預設方法
- Java - Base64編碼解碼
- Java - switch表示式
- Java - Teeing Collectors
- Java - 微基準測試
- Java - 文字塊
- Java - 動態CDS存檔
- Java - Z垃圾收集器(ZGC)
- Java - 空指標異常
- Java - 打包工具
- Java - 密封類
- Java - 記錄類
- Java - 隱藏類
- Java - 模式匹配
- Java - 簡潔數字格式化
- Java - 垃圾回收
- Java - JIT編譯器
Java雜項
- Java - 遞迴
- Java - 正則表示式
- Java - 序列化
- Java - 字串
- Java - Process API改進
- Java - Stream API改進
- Java - 增強的@Deprecated註解
- Java - CompletableFuture API改進
- Java - 流
- Java - 日期時間API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java API和框架
Java類引用
- Java - Scanner類
- Java - 陣列
- Java - 字串
- Java - Date類
- Java - ArrayList類
- Java - Vector類
- Java - Stack類
- Java - PriorityQueue類
- Java - LinkedList類
- Java - ArrayDeque類
- Java - HashMap類
- Java - LinkedHashMap類
- Java - WeakHashMap類
- Java - EnumMap類
- Java - TreeMap類
- Java - IdentityHashMap類
- Java - HashSet類
- Java - EnumSet類
- Java - LinkedHashSet類
- Java - TreeSet類
- Java - BitSet類
- Java - Dictionary類
- Java - Hashtable類
- Java - Properties類
- Java - Collection類
- Java - 陣列
Java有用資源
Java速查表
Java程式結構
// Package Declaration (Optional)
// Example: package mypackage;
// Import Statements (Optional)
// Example: import java.util.Scanner;
// Class Declaration
public class Class_name{
// Main Method
public static void main(String[] args) { }
}
列印Hello World
以下程式碼列印Hello World到控制檯:
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World");
}
}
public static void main
main()方法是JVM(Java虛擬機器)開始執行Java程式的起點。
public static void main(String[] args)
輸出 - System.out.println()
我們可以使用System.out.println()在Java中將內容列印到輸出控制檯。
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World");
}
}
println()方法
println()方法用於在Java中列印文字。每次呼叫後都會新增一個新行。
System.out.println("Hello World");
雙引號
在Java中,雙引號用於定義字串字面量。
System.out.println("If you forget the double quotes, a compilation error will occur");
print()方法
println()方法用於在Java中列印文字。每次呼叫後都會新增一個新行。
System.out.print("Hello World");
使用者輸入
在Java中,我們使用Scanner類來獲取使用者輸入。它位於java.util包中。
import java.util.Scanner;
Scanner myObj = new Scanner(System.in);
System.out.println("Enter username");
String userName = myObj.nextLine();
Java註釋
Java註釋有兩種型別:單行註釋和多行註釋。
單行註釋
Java中的單行註釋以雙斜槓//開頭,它們之間的文字會被Java編譯器忽略。
// This is a comment
System.out.println("Hello World");
多行註釋
Java中的多行註釋以/*開頭,以*/結尾,它們之間的文字會被Java編譯器忽略。
Java中的訪問修飾符
在Java中,訪問修飾符是用於設定類、方法、建構函式和欄位的可訪問性的關鍵字。
訪問修飾符型別
- public - 可從任何其他類或包訪問。
- private - 僅限於定義類;無法從外部訪問。
- protected - 可在同一包內和子類中訪問,即使在不同的包中。
- 預設(無修飾符) - 只能在同一包中的類內訪問。
變數
Java變數是儲存資料值的容器,每個變數都根據其分配的資料型別定義。
變數型別
- 區域性變數 - 區域性變數在方法、塊或建構函式內定義,並且只能在其特定作用域內訪問。
- 例項變數 - 例項變數是非靜態的,在類內但方法、建構函式或塊之外宣告。
- 靜態變數 - 靜態變數使用static關鍵字在類內宣告,在任何方法、建構函式或塊之外。
內建型別變數
Java 中定義的八種基本資料型別是:int、byte、short、long、float、double、boolean 和 char。
byte
byte 是一種基本資料型別,佔用 8 位記憶體。它可以儲存 -128 到 127 之間的數字。
long
long 是另一種與整數相關的基本資料型別,可以儲存 -9223372036854775808 到 9223372036854775808 之間的整數。long 佔用 64 位記憶體。
float
float 關鍵字是一種資料型別,可以儲存 3.4e-038 到 3.4e+038 之間的浮點數。
char
char 是一個 16 位整數,表示一個 Unicode 編碼的字元。
int
int 關鍵字是一種基本資料型別,可以儲存 -2147483648 到 2147483647 之間的數字。
short
short 關鍵字是一種資料型別,可以儲存 -32768 到 32767 之間的數字。
控制流
if-else 語句
在 Java 中,if-else 語句 根據條件執行程式碼塊。
if (x > 0) {
// code block }
else {
// code block }
switch 語句
switch 語句 選擇要執行的多個程式碼塊之一。它類似於 if-else-if 階梯語句。
switch (day) {
case 1:
// code block
break;
case 2:
// code block
break;
default:
// code block
}
for 迴圈
Java for 迴圈 用於迭代指定次數的程式碼塊。
for (int i = 0; i < 10; i++) {
// code block
}
while 迴圈
Java while 迴圈 用於在條件為真時迭代程式碼塊。
while (x < 10) {
// code block
}
break 語句
Java break 語句 用於在指定條件下終止程式的當前流程。
public class BreakExample {
public static void main(String[] args) {
for(int i=1;i<=10;i++){
if(i==5){
//Using Break Statement
break;
}
System.out.println(i);
}
}
}
continue 語句
Java continue 語句 用於繼續程式的當前流程。它用於跳轉到程式的下一部分。
public class ContinueExample {
public static void main(String[] args) {
//for loop
for(int i=1;i<=10;i++){
if(i==5){
continue;//it will jump to the next statement
}
System.out.println(i);
}
}
}
Java 面向物件概念
1. 類和物件
- 類 - 建立物件的藍圖。
- 物件 - 類的例項。
2. 繼承
繼承 允許一個類繼承另一個類的欄位和方法。
示例
class Animal {
void eat() {
System.out.println("This animal eats food.");
}
}
class Cat extends Animal {
void meow() {
System.out.println("Cat says meow!");
}
}
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
cat.eat(); // Output: This animal eats food.
cat.meow(); // Output: Cat says meow!
}
}
3. 多型
多型 允許方法根據其作用的物件執行不同的操作。
示例
class Animal {
void sound() {
System.out.println("Animal makes sound");
}
}
class Dog extends Animal {
void sound() {
System.out.println("Dog barks");
}
}
class Cat extends Animal {
void sound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.sound(); // Output: Dog barks
myCat.sound(); // Output: Cat meows
}
}
4. 封裝
封裝 是將資料(變數)和程式碼(方法)包裝在一起作為單個單元的技術。
示例
class BankAccount {
private double balance;
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public double getBalance() {
return balance;
}
}
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount();
account.deposit(100.0);
System.out.println("Balance: " + account.getBalance()); // Output: Balance: 100.0
}
}
5. 抽象
抽象 是隱藏複雜實現細節並僅顯示物件基本特徵的概念。
示例
abstract class Shape {
abstract void draw();
}
class Circle extends Shape {
void draw() {
System.out.println("Drawing a circle");
}
}
class Rectangle extends Shape {
void draw() {
System.out.println("Drawing a rectangle");
}
}
public class Main {
public static void main(String[] args) {
Shape circle = new Circle();
Shape rectangle = new Rectangle();
circle.draw(); // Output: Drawing a circle
rectangle.draw(); // Output: Drawing a rectangle
}
}
建構函式
在 Java 中,建構函式 是初始化新的類例項的程式碼塊。在建立物件時呼叫它,為其分配記憶體。
建構函式型別
- 預設建構函式 - 此型別的建構函式不需要任何引數。如果在類中沒有顯式宣告建構函式,編譯器將自動生成一個沒有引數的預設建構函式。
- 引數化建構函式 - 此型別的建構函式需要引數,用於在初始化期間為類的欄位分配自定義值。
陣列
陣列 是資料結構,用於在連續的記憶體位置儲存相同資料型別的多個值。
一維陣列
int arr[] = new int[20]; int[] arr = new int[20];
示例
public class SingleDimensional {
public static void main(String[] args) {
int[] arr = new int[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] : " + arr[i]);
}
}
}
多維陣列
陣列也可以是多維的,允許以矩陣格式儲存資料。
int[][] arr = new int[3][3]; int arr[][] = new int[3][3];
這是一個實現二維陣列的 Java 程式:
public class MultiDimensional {
public static void main(String args[]) {
int arr[][] = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
字串
Java 字串 表示一系列字元。
字串方法
- length() - 返回字串的長度。
- charAt() - 返回指定索引處的字元。
- substring() - 返回從指定索引到結尾的子字串。
- indexOf() - 返回指定子字串第一次出現的索引。
- toLowerCase() - 將字串轉換為小寫。
- toUpperCase() - 將字串轉換為大寫。
- trim() - 刪除前導和尾隨空格。
字串連線
字串連線是將兩個或多個字串組合成單個字串的過程。
+ 運算子
String str1 = "Hello, "; String str2 = "world!"; String result = str1 + str2;
concat() 方法
String str1 = "Hello, "; String str2 = "world!"; String result = str1.concat(str2);
字串比較
在 Java 中比較字串時,需要注意比較字串引用和字串內容的區別。
使用 equals() 方法
String str1 = "Hello"; String str2 = "Hello"; boolean areEqual = str1.equals(str2);
使用 == 運算子
String str1 = new String("Hello");
String str2 = new String("Hello");
boolean areSameReference = (str1 == str2);
使用 compareTo() 方法
String str1 = "apple"; String str2 = "banana"; int comparisonResult = str1.compareTo(str2);
異常處理
Java 異常處理 是處理執行時錯誤以維持程式流程的過程。
Java try-catch 塊
Try-catch 塊用於處理可能丟擲異常的程式碼。
語法
try {
// code that may throw an exception
} catch (Exception e) {
// code to handle the exception
}
Java finally 塊
finally 塊用於執行無論是否處理異常都要執行的特定程式碼。
示例
public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Inside try block.");
int result = 10 / 0; // This will cause an exception
} catch (ArithmeticException e) {
System.out.println("Caught an exception: " + e.getMessage());
} finally {
System.out.println("This block always executes.");
}
}
}
Java throw 異常
Java throw 關鍵字 用於顯式丟擲異常。
語法
throw new exception_class("error statement ");
示例
public class ThrowExample {
public static void main(String[] args) {
try {
checkAge(15); // This will throw an exception
} catch (IllegalArgumentException e) {
System.out.println("Caught an exception: " + e.getMessage());
}
}
static void checkAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("Age must be 18 or older.");
}
System.out.println("Age is valid.");
}
}