常見的異常分類:java
程序中的異常
示例1:給出除數和被除數,求商
若是除數爲0,出異常
若是除數或者被除數不是數字,出異常
示例2:將d:/a.txt複製到e:/a.txt • 若是d:/a.txt不存在
若是e:/存在a.txt • 若是e盤空間不足
若是複製過程當中出錯程序員
if(「d:/a.txt」這個文件存在){ if(e盤的空間大於a.txt文件長度){ if(文件複製一半IO流斷掉){ 中止copy,輸出:IO流出問題! }else{ copyFile("d:/a.txt","e:/a.txt"); } }else{ 輸出:e盤空間不夠存放a.txt! } }else{ 輸出:a.txt不存在! }
程序中有異常時,面對異常該怎麼辦呢?
方式1:由開發者經過if-else來解決異常問題
代碼臃腫:業務代碼和異常處理代碼放一塊兒
程序員要花很大精力"堵漏洞「
程序員很難堵住全部「漏洞」,對程序員自己要求較高
方式2:開發者不須要經過if-else來解決異常問題,而是Java提供異常處理機制。它將異常處理代碼和和業務代碼分 離,使程序更優雅,更好的容錯性,高鍵壯性。數據庫
異常的概念:
軟件程序在運行過程當中發生的不正常的事件,好比要打開某一個文件時,這個文件可能不存在或者格式不對;你要讀取數據庫的數據,數據多是空的;咱們把碰見的這些問題,就叫作異常(Exception)編程
JAVA是採用 面向對象 的方式來處理異常。
處理過程:
1.拋出異常:在執行一個方法時,若是發生異常,則這個方法生成表明該異常的一個對象,中止當前執行路徑,並把異常 對象提交給JRE,
2.捕獲異常:JRE獲得該異常後,尋找相應的代碼來處理該異常,JRE在方法的調用棧中查找,從生成異常的方法開始回 溯,直到找到相應的異常處理代碼爲止數組
try-catch處理異常指針
try {
copyFile("d:/a.txt","e:/a.txt"); //假設這裏出現異常
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace(); //在這裏進行捕獲
}code
1.RuntTimeException運行時異常分析_運行時異常處理
這類錯誤一般是由編程錯誤致使的,因此在編寫程序時,並不要求必須使用異常機制來處理這類異常,常常須要經過增長「邏輯判斷來處理這些異常」對象
int b=0; System.out.println(1/b);
解決:blog
int b=0; if (b!=0) { System.out.println(1/b); }
當程序訪問一個空對象的成員變量或方法,或者訪問一個空數組成員時會發生空指針異常(NullPointerException),怎麼
處理,能夠加個if語句體,解決空指針異常,一般是增長非空判斷事件
2.ClassCastException強制轉型報錯
public class _Exception { public static void main(String[] args) { // TODO Auto-generated method stub Animal animal=new Dog(); Cat c=(Cat)animal; } } class Animal{……} class Dog extends Animal{……} class Cat extends Animal{……}
報錯:Exception in thread "main" java.lang.ClassCastException: cn.xiaomu_07.Dog cannot be cast to cn.xiaomu_07.Cat
at cn.xiaomu_07._Exception.main(_Exception.java:28)
解決:
public class _Exception { public static void main(String[] args) { // TODO Auto-generated method stub Animal animal=new Dog(); if (animal instanceof Cat) { Cat c=(Cat)animal; } }} class Animal{……} class Dog extends Animal{……} class Cat extends Animal{……}
3.數組越界(ArrayInsexOutOfBoundsException)異常處理
int[] arr=new int[5]; System.out.println(arr[5]);
解決:
int[] arr=new int[5]; int v=5; if (v<arr.length) { System.out.println(arr[5]); } System.out.println(arr[5]); }