Two Types of Error in JAVA
在 java 中有兩種不同的 error, Compile-time Error 和 Runtime Error.
Compile-time Error: 發生在程式compile的時候, compile-time error 不能被catch,只是error,不是exception;程式並沒有執行。
造成的原因:
1. 語法錯誤
1.1 ...expected. 括號 ( parentheses, square brackets, curly braces)等沒有匹配或者缺少分號( semicolon)
1.2unclosed string literal String 的冒號不匹配 。
1.3... 這裡都是簡單的語法上錯誤。
2. Identifiers
2.1 比如缺少對某個變數的定義
2.2 重複對某個變數定義
2.3 不能訪問 ...has private access in ..
3. Computation
3.1 使用沒有被賦值的變數對其他變數賦值。 variable ... might not have been initialized. etc.
3.2 傳入引數型別不匹配
3.3 操作符不能進行計算 int a; boolean b; a + b 錯誤。 ..
4. 返回值
4.1 缺少返回值/返回語句
4.2 沒有返回型別
4.3 不能到達的語句
5. 訪問靜態entity
訪問物件中的方法, 沒有例項化物件,也沒有講方法使用static進行標註。
Runtime Error: 發生在程式執行的時候.
Runtime Error 大體上可分為兩類 - 1. Errors 2. Exceptions.
它們的結構如下: (紅色塊 是checked exception 藍色塊的是 unckecked exception)
Unchecked Exception: 就是不需要強制使用 try-catch throw的exception ( RunTime Exception 的所有子類)
Checked Exception: Exception 的所有除了Runtime Exception 的子類,如果我們不對checked exception處理的時候,compile 根本過不了( 在eclipse上會顯示exception, 並提示你增加try-catch)。
所以可以根據在編譯的時候編譯器是否會檢查,檢查的話就是checked exception, 反之就是 unchecked.
從上圖可以看出來,Error 和 Exception 都是繼承 Throwable 類, 那麼說明他們都可以丟擲異常。 但是值得注意的是Error不能被try - catch 到, 但是 Exception 能被try - catch 到。
使用者定義 Exception
以下是一個使用者定義 exception 的例子。
因為我們繼承的是Exception, 所以我們定義的這個 exception 是 checked exception
package Exception_Example;
/**
* Define Exception Class
*
* */
public class InsufficientFundsException extends Exception{
private double amount;
public InsufficientFundsException (double amount) {
this.amount = amount;
}
public double getAmount () {
return amount;
}
}
package Exception_Example;
public class CheckingAccount {
private double balance;
private int number;
public CheckingAccount (int number) {
this.number = number;
}
public void deposit (double money) {
this.balance += money;
}
public void withdraw (double amount) throws InsufficientFundsException {
if (amount <= balance) {
balance -= amount;
} else {
double needs = amount - balance;
throw new InsufficientFundsException(needs);
}
}
public double getBalance () {
return this.balance;
}
public int getNumber () {
return this.number;
}
}
Main 函式
package Exception_Example;
public class BankDemo {
public static void main (String[] args) {
CheckingAccount account = new CheckingAccount(101);
account.deposit(500);
//Since we extends from Exception which is checked exception
//we must handle it before we can compile.
try{
account.withdraw(600);
} catch (InsufficientFundsException e) {
System.out.println(e + " Less money: " + e.getAmount());
} finally {
System.out.println("Successfully cache!");
}
}
}
因為這是一個 checked exception, 所以在main函式中我們必須加上try - catch.
但是如果我們要是想定義一個unchecked 的 exception呢?
其實就是簡單的講 InsufficientFundsException 的父類改成 RuntimeException, 在這時 main函式可以變成。並且不會報錯( 執行時丟擲異常)
<span style="font-size:14px;">package Exception_Example;
public class BankDemo {
public static void main (String[] args) {
CheckingAccount account = new CheckingAccount(101);
account.deposit(500);
account.withdraw(600);
}
}</span><span style="font-size:18px;">
</span>
有問題歡迎指出
相關文章
- FATAL ERROR IN TWO-TASK SERVER: error = 12569ErrorServer
- FATAL ERROR IN TWO-TASK SERVER: error = 12152ErrorServer
- Two Sum leetcode javaLeetCodeJava
- EF Core – Owned Entity Types & Complex Types
- TypeScript @typesTypeScript
- stock Types
- Add Two Numbers leetcode javaLeetCodeJava
- Divide Two Integers leetcode javaIDELeetCodeJava
- Leetcode-1 Two Sum(Java) -by zzyLeetCodeJava
- Median of Two Sorted Array leetcode javaLeetCodeJava
- Merge Two Sorted Lists leetcode javaLeetCodeJava
- Types of Locks (340)
- java筆記-two-java泛型程式設計(簡記)Java筆記泛型程式設計
- coca after two months vs in two months
- 譯|There Are No Reference Types in GoGo
- TypeScript 之 Object TypesTypeScriptObject
- Understanding Service Types
- Scala的Abstract Types
- Types of SAP Support PackagesPackage
- types of undo segments(ZT)
- Behind RabbitMQ Exchange TypesMQ
- Trusted Types APIRustAPI
- DataTransfer.types 屬性
- TypeScript 之 Indexed Access TypesTypeScriptIndex
- TypeScript 之 Conditional TypesTypeScript
- birkenstock sandals spec Younger types
- Types of Processes (108)
- a tale of two cities
- Two extremes in lifeREM
- Two Pirates - 2
- 【譯】 Types are moving to the right
- SAP MM Stock Tables and Stock Types
- 關於java.lang.Error: Probable fatal error:No fonts found問題JavaError
- Divide Two IntegersIDE
- Enqueue events part twoENQ
- F - Two Sequence Queries
- Tokitsukaze and Two Colorful Tapes
- 【Oracle】-【TWO_TASK】-TWO_TASK環境變數的作用Oracle變數