Java 異常 - Try...Catch
在 Java 程式碼執行期間,可能會發生各種錯誤,包括程式設計師編碼錯誤、使用者輸入錯誤以及其他不可預料的狀況。
當錯誤發生時,Java 通常會停止並生成錯誤訊息,這個過程稱為丟擲異常。
try...catch 語句
try 語句允許您定義一段程式碼塊,並在其中測試是否發生錯誤。
catch 語句允許您定義一段程式碼塊,當 try 塊中發生錯誤時執行該程式碼塊。
try 和 catch 關鍵字成對使用,語法如下:
try {
// 要嘗試的程式碼塊
} catch (Exception e) {
// 處理錯誤的程式碼塊
}
示例:
public class Main {
public static void main(String[] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]); // 陣列越界錯誤
} catch (Exception e) {
System.out.println("Something went wrong.");
}
}
}
輸出:
Something went wrong.
finally 語句
finally 語句允許您在 try...catch 語句之後執行一段程式碼,無論 try 塊中是否發生錯誤。
示例:
public class Main {
public static void main(String[] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]); // 陣列越界錯誤
} catch (Exception e) {
System.out.println("Something went wrong.");
} finally {
System.out.println("The 'try catch' is finished.");
}
}
}
輸出:
Something went wrong.
The 'try catch' is finished.
throw 關鍵字
throw 關鍵字允許您建立自定義異常。
throw 關鍵字通常與異常型別一起使用。Java 中提供了許多異常型別,例如:
- ArithmeticException
- FileNotFoundException
- ArrayIndexOutOfBoundsException
- SecurityException
示例:
public class Main {
static void checkAge(int age) {
if (age < 18) {
throw new ArithmeticException("Access denied - You must be at least 18 years old.");
} else {
System.out.println("Access granted - You are old enough!");
}
}
public static void main(String[] args) {
checkAge(15); // 年齡小於 18 歲
}
}
輸出:
Exception in thread "main" java.lang.ArithmeticException: Access denied - You must be at least 18 years old.
at Main.checkAge(Main.java:4)
at Main.main(Main.java:12)
- try...catch 語句用於處理 Java 程式碼中的異常。
- finally 語句用於確保程式碼在任何情況下都會執行。
- throw 關鍵字用於建立自定義異常。
建議:
- 使用 try...catch 語句來處理可能發生的錯誤。
- 使用 finally 語句來釋放資源或執行清理操作。
- 僅在需要時使用 throw 關鍵字來建立自定義異常。
Java正規表示式
什麼是正規表示式?
正規表示式是一系列字元,形成一個搜尋模式。當你在文字中搜尋資料時,可以使用這個搜尋模式描述你要查詢的內容。
正規表示式可以是單個字元,也可以是更復雜的模式。
Java沒有內建的正規表示式類,但我們可以匯入java.util.regex
包來使用正規表示式。該包包括以下類:
- Pattern類 - 定義要在搜尋中使用的模式
- Matcher類 - 用於搜尋模式
- PatternSyntaxException類 - 指示正規表示式模式中的語法錯誤
示例
查詢句子中是否存在單詞"hello"的任何出現:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("hello", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("Visit hello!");
boolean matchFound = matcher.find();
if(matchFound) {
System.out.println("匹配找到");
} else {
System.out.println("未找到匹配");
}
}
}
輸出:
匹配找到
示例解釋
在這個例子中,在句子中搜尋單詞"hello"。
- 首先,使用
Pattern.compile()
方法建立模式。第一個引數指示正在搜尋的模式,第二個引數有一個標誌,表示搜尋應該是不區分大小寫的。第二個引數是可選的。 - 使用
matcher()
方法在字串中搜尋模式。它返回一個包含有關所執行搜尋的資訊的Matcher
物件。 find()
方法在字串中找到模式時返回true,未找到時返回false。
標誌
compile()
方法中的標誌更改搜尋的執行方式。以下是其中一些:
Pattern.CASE_INSENSITIVE
- 在執行搜尋時將忽略字母的大小寫。Pattern.LITERAL
- 在執行搜尋時,模式中的特殊字元將不具有任何特殊含義,並且在執行搜尋時將被視為普通字元。Pattern.UNICODE_CASE
- 與CASE_INSENSITIVE
標誌一起使用,還可以忽略英語字母以外的字母的大小寫。
正規表示式模式
Pattern.compile()
方法的第一個引數是模式。它描述了正在搜尋的內容。
-
方括號用於查詢一系列字元:
表示式 描述 [abc] 在方括號之間的選項中找到一個字元 [^abc] 在方括號之間找到一個字元,但不是這些字元 [0-9] 在範圍0到9之間找到一個字元
元字元
元字元是具有特殊含義的字元:
元字元 | 描述 |
---|---|
| | 查詢由|分隔的任何模式中的任何一個匹配項,例如:cat|dog|fish |
. | 查詢任何字元的一個例項 |
^ | 在字串的開頭找到匹配項,例如:^Hello |
$ | 在字串的末尾找到匹配項,例如:World$ |
\d | 查詢數字 |
\s | 查詢空白字元 |
\b | 在單詞的開頭找到匹配項,如\bWORD,或在單詞的結尾找到匹配項,如WORD\b |
\uxxxx | 查詢由十六進位制數xxxx指定的Unicode字元 |
量詞
量詞定義數量:
量詞 | 描述 |
---|---|
n+ | 匹配包含至少一個n的任何字串 |
n* | 匹配包含零個或多個n的任何字串 |
n? | 匹配包含零個或一個n的任何字串 |
n | 匹配包含X個n的任何字串的序列 |
n | 匹配包含X到Y個n的任何字串的序列 |
n | 匹配包含至少X個n的任何字串 |
最後
為了方便其他裝置和平臺的小夥伴觀看往期文章:
微信公眾號搜尋:Let us Coding
,關注後即可獲取最新文章推送
看完如果覺得有幫助,歡迎 點贊、收藏、關注