異常就是在程序的運行過程當中所發生的不正常的事件,它會中斷正在運行的程序。java
異常不是錯誤數據庫
程序中關鍵的位置有異常處理,提升程序的穩定性apache
Java的異常處理是經過5個關鍵字來實現的數組
try:嘗試,把有可能發生錯誤的代碼放在其中,必須有安全
catch:捕獲,當發生異常時執行jsp
finally:最終,無論是否有異常都將執行ide
throw:拋出,引起異常spa
throws:拋出多個,聲明方法將產生某些異常hibernate
package com.zhangguo.chapter6.d1; import java.util.Scanner; public class Exception1 { public static void main(String[] args) { Scanner input=new Scanner(System.in); //int i=input.nextInt(); int i=Integer.parseInt(input.next()); System.out.println("您輸入的是:"+i); System.out.println("程序結束了"); } }
異常處理:線程
package com.zhangguo.chapter6.d1; import java.util.Scanner; public class Exception1 { public static void main(String[] args) { try { Scanner input = new Scanner(System.in); int i = Integer.parseInt(input.next()); System.out.println("您輸入的是:" + i); } catch (Exception exp) { System.out.println("發生異常了:" + exp.getMessage()); } System.out.println("程序結束了"); } }
結果:
finally在任何狀況下都將執行,正常時會執行,不正常也會執行
package com.zhangguo.chapter6.d1; import java.util.Scanner; public class Exception1 { public static void main(String[] args) { try { Scanner input = new Scanner(System.in); int i = Integer.parseInt(input.next()); System.out.println("您輸入的是:" + i); } catch (Exception exp) { System.out.println("發生異常了:" + exp.getMessage()); }finally { System.out.println("輸入結束"); } System.out.println("程序結束了"); } }
結果:
1
您輸入的是:1
輸入結束
程序結束了
若是用戶輸入是的xyz
//算術異常 ArithmeticExecption //空指針異常類 NullPointerException //類型強制轉換異常 ClassCastException //數組負下標異常 NegativeArrayException //數組下標越界異常 ArrayIndexOutOfBoundsException //違背安全原則異常 SecturityException //文件已結束異常 EOFException //文件未找到異常 FileNotFoundException //字符串轉換爲數字異常 NumberFormatException //操做數據庫異常 SQLException //輸入輸出異常 IOException //方法未找到異常 NoSuchMethodException //抽象方法錯誤,當應用試圖調用抽象方法時拋出 java.lang.AbstractMethodError //斷言錯誤,用來指示一個斷言失敗的狀況 java.lang.AssertionError //類循環依賴錯誤,若檢測到類之間循環依賴則拋出該異常 java.lang.ClassCircularityError //類格式錯誤 java.lang.ClassFormatError //錯誤基類,標識嚴重程序運行問題,不該被應用程序捕獲的反常狀況 java.lang.Error //非法訪問錯誤,違反域或方法的可見性聲明 java.lang.IllegalAccessError //不兼容的類變化錯誤,當正在執行的方法所依賴的類定義發生了不兼容的改變時,拋出該異常 java.lang.IncompatibleClassChangeError //實例化錯誤,構造一個抽象類或者接口時拋出該異常 java.lang.InstantiationError //內部錯誤 java.lang.InternalError //連接錯誤 java.lang.LinkageError //未找到類定義錯誤,找不到該類的定義時拋出該錯誤 java.lang.NoClassDefFoundError //域(成員變量,字段)不存在錯誤 java.lang.NoSuchFieldError //方法不存在錯誤 java.lang.NoSuchMethodError //內存不足錯誤 java.lang.OutOfMemoryError //堆棧溢出錯誤,如遞歸調用的層次太深 java.lang.StackOverflowError //線程已結束 java.lang.ThreadDeath //未知錯誤 java.lang.UnknownError //未知足的連接錯誤 java.lang.UnsatisfiedLinkError //不支持的類版本錯誤 java.lang.UnsupportedClassVersionError //驗證錯誤 java.lang.VerifyError //虛擬機錯誤 java.lang.VirtualMachineError //算術條件異常,如整數除零 java.lang.ArithmeticException //數組索引越界異常 java.lang.ArrayIndexOutOfBoundsException //數組存儲異常,存放非數組聲明類型 java.lang.ArrayStoreException //類型轉換異常 java.lang.ClassCastException //找不到類異常 java.lang.ClassNotFoundException //克隆不支持異常,如沒有實現Cloneable接口 java.lang.CloneNotSupportedException //枚舉常量不存在異常 java.lang.EnumConstantNotPresentException //根異常 java.lang.Exception //非法訪問異常 java.lang.IllegalAccessException //非法的監控狀態異常 java.lang.IllegalMonitorStateException //非法的狀態異常 java.lang.IllegalStateException //非法的線程狀態異常 java.lang.IllegalThreadStateException //索引越界異常 java.lang.IndexOutOfBoundsException //實例化異常 java.lang.InstantiationException //被中斷異常 java.lang.InterruptedException //數組大小爲負值異常 java.lang.NegativeArraySizeException //屬性不存在異常,當訪問某個類的不存在的屬性時拋出該異常 java.lang.NoSuchFieldException //方法不存在異常 java.lang.NoSuchMethodException //空指針異常。當應用試圖在要求使用對象的地方使用了null時,拋出該異常 java.lang.NullPointerException //數字格式異常 java.lang.NumberFormatException //運行時異常 java.lang.RuntimeException //安全異常 java.lang.SecurityException //字符串索引越界異常 java.lang.StringIndexOutOfBoundsException //類型不存在異常 java.lang.TypeNotPresentException //不支持的方法異常 java.lang.UnsupportedOperationException //Jsp頁面異常 javax.servlet.jsp.JspException //JSP引擎解析異常 org.apache.jasper.JasperException //Servlet異常 javax.servlet.ServletException //對象已被刪除異常 org.hibernate.ObjectDeletedException
package com.zhangguo.chapter6.d1; public class Exception2 { public static void main(String[] args) { try { System.out.println(div(30,3)); } catch (Exception e) { //輸出異常的堆棧信息 e.printStackTrace(); } try { System.out.println(div(3,0)); } catch (Exception e) { System.out.println(e.getMessage()); } } //throws 聲明方法將可能拋出異常 public static int div(int n1,int n2) throws Exception{ if(n2==0){ //拋出異常 throw new Exception("除數不能爲零"); } return n1/n2; } }
運行結果:
public class ArithmeticException extends RuntimeException { private static final long serialVersionUID = 2256477558314496007L; /** * Constructs an {@code ArithmeticException} with no detail * message. */ public ArithmeticException() { super(); } /** * Constructs an {@code ArithmeticException} with the specified * detail message. * * @param s the detail message. */ public ArithmeticException(String s) { super(s); } }