java學習筆記系列:
java學習筆記11--集合總結
java學習筆記10--泛型總結
java學習筆記9--內部類總結
java學習筆記8--接口總結
java學習筆記7--抽象類與抽象方法
java學習筆記6--類的繼承、Object類
java學習筆記5--類的方法
java學習筆記4--對象的初始化與回收
java學習筆記3--類與對象的基礎
java學習筆記2--數據類型、數組
java學習筆記1--開發環境平臺總結
本文地址:http://m.survivalescaperooms.com/archimedes/p/java-study-note12.html,轉載請注明源地址。
1、異常處理概述從一個讀取兩個整數并顯示商的例子:
public static void main(String args[]){ Scanner input = new Scanner(System.in); System.out.Enter two integers: 3 0
Exception in thread "main" java.lang.ArithmeticException: / by zeroat Main.main(Main.java:18)
解決的一個簡單的辦法是添加一個if語句來測試第二個數字:
public class Main{ public static void main(String args[]) { Scanner input = new Scanner(System.in); System.out.print("Enter two integers: "); int number1 = input.nextInt(); int number2 = input.nextInt(); if(number2 != 0) System.out.println(number1 + " / " + number2 + " is " + (number1 / number2)); else System.out.println("Divisor cannot be zero "); }}為了演示異常處理的概念,包括如何創建、拋出、捕獲以及處理異常,繼續改寫上面的程序如下:
public class Main{ public static void main(String args[]) { Scanner input = new Scanner(System.in); System.out.print("Enter two integers: "); int number1 = input.nextInt(); int number2 = input.nextInt(); try { if(number2 == 0) throw new ArithmeticException("Divisor cannot be zero"); System.out.println(number1 + " / " + number2 + " is " + (number1 / number2)); } catch(ArithmeticException ex) { System.out.println("Exception: an integer " + "cannot be divided by zero "); } System.out.println("Execution continues ..."); }}2、異常處理的優勢改用方法來計算商:
public class Main{ public static int quotient(int number1, int number2) { if(number2 == 0) throw new ArithmeticException("Divisor cannot be zero"); return number1 / number2; } public static void main(String args[]) { Scanner input = new Scanner(System.in); System.out.print("Enter two integers: "); int number1 = input.nextInt(); int number2 = input.nextInt(); try { int result = quotient(number1, number2); System.out.println(number1 + " / " + number2 + " is " + result); } catch(ArithmeticException ex) { System.out.println("Exception: an integer " + "cannot be divided by zero "); } System.out.println("Execution continues ..."); }}異常處理的優勢就是將檢測錯誤從處理錯誤中分離出來。
3、異常類型
4、關于異常處理的更多知識java的異常處理模型基于三種操作:聲明一個異常、拋出一個異常、捕獲一個異常

聲明異常
在方法中聲明異常,就是在方法頭中使用關鍵字throws,如下所示:
public void myMethod throws Exception1,Exception2,……,ExceptionN
拋出異常
檢測一個錯誤的程序可以創建一個正確的異常類型的實例并拋出它
實例:
IllegalArgumentException ex = new IllegalArgumentException("Worng Argument");throw ex;或者直接:
throw new IllegalArgumentException("Worng Argument");捕獲異常
當拋出一個異常時,可以在try-catch中捕獲和處理它:
try { statements;} catch (exception1 ex1){ handler for exception1;} catch (exception1 ex2){ handler for exception2;} ……catch (exception1 exN){ handler for exceptionN;} 從異常中獲取信息
可以采用Throwable類中的方法獲取異常的信息
public class test { public static void main(String[] args) { try { System.out.println(sum(new int[]{1,2,3,4,5})); } catch(Exception ex) { ex.printStackTrace(); System.out.println(ex.getMessage()); System.out.println(ex.toString()); System.out.println("Trace Info Obtained from getBackTrace"); StackTraceElement[] traceElements = ex.getStackTrace(); for(int i = 0; i < traceElements.length; i++) { System.out.print("monthod " + traceElements[i].getMethodName()); System.out.println("(" + traceElements[i].getClassName()); System.out.println(traceElements[i].getLineNumber() + ")"); } } } private static int sum(int[] list) { int sum = 0; for(int i = 0; i <= list.length; i++) { sum += list[i]; } return sum; }}finally語句
無論異常是否出現,都希望執行某些代碼,這時可以采取finally子句:
public class test { public static void main(String[] args) { PrintWriter output = null; try { output = new PrintWriter("wu.txt"); output.println("wlecome tio java"); } catch(IOException ex) { ex.printStackTrace(); } finally { if(output != null) output.close(); } System.out.println("End of the program"); }}
新聞熱點
疑難解答