先看標準的例子:
Test.java
/* 模擬註冊 */ public class Test{ public static void main(String[] args){ //假如用戶提供的用戶名如下 String username = "xpleaf"; //註冊 CustomerService cs = new CustomerService(); try{ cs.register(username); }catch(IllegalNameException e){ System.out.println(e.getMessage()); } } }
CustomerService.java
//顧客相關的業務 public class CustomerService{ //對外提供一個註冊的方法 public void register(String name) throws IllegalNameException{ //完成註冊 if(name.length()<6){ //異常 //創建異常對象 //IllegalNameException e = new IllegalNameException("用戶名長度不能少6位"); //手動拋出異常 //throw e; throw new IllegalNameException("用戶名長度不能少6位"); } //如果代碼能執行到此處,證明用戶名是合法的. System.out.println("註冊成功!"); } }
IllegalNameException.java
/* 自定義“無效名字異常”. 1.編譯時異常,直接繼承Exception 2.運行時異常,直接繼承RuntimeException */ public class IllegalNameException extends Exception{ //編譯時異常 //public class IllegalNameException extends RuntimeException{ //運行時異常 //定義異常一般提供兩個構造方法 public IllegalNameException(){} public IllegalNameException(String msg){ super(msg); } }
其實比較簡單,只要把相關的類創建好就OK了,最關鍵是在異常處理類中繼承Exception。
根據此,再寫一個自定義異常,要求如果輸入的數字大於100,則拋出異常:
Main_pro.java
import java.util.Scanner; public class Main_pro { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Please input a number for a:"); Scanner s = new Scanner(System.in); int a = s.nextInt(); Num_check check = new Num_check(); try{ check.checknum(a); } catch(NumError e){ System.out.println(e.getMessage()); } } }
Num_check.java
public class Num_check { public void checknum(int num) throws NumError{ if (num>=100){ throw new NumError("Error!"); } System.out.println("The number is normal."); } }
NumError.java
public class NumError extends Exception{ public NumError(){} public NumError(String msg){ super(msg); } }
通過上面兩個例子,再對比Python中的異常處理,最大的感想是:Python的真的要簡潔好多!當然,這是因爲在Java中,每一個方法都要寫成一個類,而在Python中,不一定要使用面向對象的程序設計思想,因此可以簡潔很多。
關於Python異常處理的詳細說明,可以參考前面我寫的文章: