Python自動化:pubmed實現自動搶票、雙十一搶貨
阿新 • • 發佈:2020-09-07
異常
異常的根類是java.lang.Throwable
,其包括Error
和Exception
兩個子類。Error
我們不能解決,如記憶體溢位等。但是Exception
可以避免(編譯異常、執行時異常等)。
try、catch、finally、throw、throws
throw丟擲異常
應用於方法內,如:用if語句判斷是否超過索引,如果是就丟擲異常:
throw new ArrayIndexOutOfBoundsException("陣列越界");
public class Test { public static void main(String[] args) { int[] arr = {1, 2, 3, 4}; int index = 10; if (index >= 4) { throw new ArrayIndexOutOfBoundsException("陣列越界"); } else { System.out.println(arr[index]); } } }
throws宣告異常
應用於方法之上,格式:public void method() throws XxxException {}
- 如果方法內部有丟擲異常,throws後面必須宣告。
- 聲明瞭異常,要麼繼續拋給方法的呼叫者,要麼交給
tray{}catch
public class Test { public static void main(String[] args) throws ArrayIndexOutOfBoundsException{ int[] arr = {1, 2, 3, 4}; int index = 10; if (index >= 4) { throw new ArrayIndexOutOfBoundsException("陣列越界"); } else { System.out.println(arr[index]); } } }
try..catch捕獲異常
如果不throws異常,那麼可以捕獲異常,自己處理。一般在工作中,會把異常資訊記錄在日誌。
- catch可以有多個,不能重複,子異常先與父異常處理。
public class Test { public static void main(String[] args) { int[] arr = {1, 2, 3, 4}; int index = 10; try { System.out.println(arr[index]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("陣列越界"); System.out.println(e.getMessage()); // 簡短描述 System.out.println(e.toString()); // 詳細描述 e.printStackTrace(); // 最全面資訊 } System.out.println("後續程式碼也會執行"); } }
子類繼承父類時,對丟擲異常的處理:
- 父類有丟擲異常,子類可以丟擲相同的異常,或者丟擲子異常,或者不丟擲;
- 父類沒有丟擲異常,子類也可以丟擲,但必須捕獲。
自定義異常類
需要繼承兩個類:
java.lang.Exception
編譯異常,要麼trows,要麼try{}catchjava.lang.RuntimeException
執行異常,交給虛擬機器處理
例子:模擬註冊,如果使用者存在,則丟擲異常
import java.util.*;
public class Test {
static String[] usernames = {"張三", "李四", "王五"};
public static void main(String[] args) {
System.out.println("請輸入您要註冊的使用者名稱: ");
Scanner sc = new Scanner(System.in);
String username = sc.next();
check(username);
}
public static void check(String username) {
for (String name : usernames) {
if (name.equals(username)) {
try {
throw new MyException("使用者名稱已註冊!!!");
} catch (MyException e) {
e.printStackTrace();
return; // 結束
}
}
}
System.out.println("恭喜您,註冊成功!");
}
}
class MyException extends Exception {
public MyException() {
}
public MyException(String message) {
super(message);
}
}