天天看點

異常

異常處理:

異常處理,是程式設計語言或計算機硬體裡的一種機制,用于處理軟體或資訊系統中出現的異常狀況(即超出程式正常執行流程的某些特殊條件)。通過異常處理,我們可以對使用者在程式中的非法輸入進行控制和提示,以防程式崩潰。

就好比一個旅遊景點,每到一個有可能出現問題情況的地方就會設定一個處理問題的處理點,不同的問題有不同的處理點,例如花粉過敏有花粉過敏的處理點,摔傷有摔傷的處理點等。程式也是如此會出現各種各樣的錯誤,同理不同的異常錯誤有不同的異常錯誤處理方法。

面對出現錯誤該有的解決心态:

  出現異常出現錯誤了不要煩躁或抱怨,出錯了就是經驗就是見識,是以應該保持良好的心态。解決錯誤的時間越長就記得越深刻越能獲得更多的經驗,當一個錯誤解決不了的時候不要鑽牛角尖,可以先休息一下喝喝茶、散散步,等心情放松再去解決,如果還是解決不了就第二天再解決。

  初學時出異常先看報錯名稱或編号,學會排除法(把一部分代碼注釋掉,然後一句一句分開運作)使用列印語句列印變量和執行過程,還是有錯誤就把類給删掉,慢慢排除。

常見的異常介紹:

java.lang.NullPointerException:  空指針錯誤,原因:通路的對像變量未指向記憶體空間

String s=null; 賦一個空指針,未配置設定記憶體

s.toString(); 進行調用就會出現錯誤

可以使用if語句進行判斷或者try catch捕獲

_______________________________________________________

java.lang.AraysIndexOutOfBoundsException: 數組越界錯誤,出現這種錯誤是因為調用下标指派小于0或大于等于數組長度

int[] i=new int[3];

i[3]=100; 因為數組長度是3,是以這種指派方式就會出現數組越界錯誤

java.lang.StringIndexOutOfBoundsException: 字元串下标越界錯誤

原因:String字元串是使用char[]數組制作的

String s="abcd";

s.charAt(4); 因為下标是從0開始的是以會出錯誤

java.lang.ArithmeticException:不能被零整除錯誤,原因:零不可以作為除數

System.out.println(1/0); 示例:不能被0整除是以會出錯誤

java.lang.NumberFormatException 數字格式化錯誤,原因:字元串内容無法轉換成十進制數值,字元串内容轉換成數字錯誤

Integer.parseInt("123?"); 錯誤代碼示例

java.lang.ClassCastException  類型轉換錯誤,原因:你所強制轉換的對象類型不符合要強轉的類型

Object obj=new String();

Test t=(Test)obj;

if(obj instanceof Test){ 加上一個判斷語句就可以避免上面那種寫法出現的類型轉換錯誤

    Test t=(Test)obj;

}

java.lang.ClassNotFoundExceptiong 類沒有建立,查找不到要加載的類,原因:在classpath找不到你要的類,有可能寫錯名字 要記住包+類名才是類的全名

此錯誤出現的情況:

1.classpath環境中沒有你要的這個類

2.或者是開發環境中沒有你要的這個類

3.代碼寫錯

Class.forName("aaa"); 此錯誤示例代碼

java.lang.NoClassDefFoundError JVM報錯找不到類檔案

找不到所要查找的屬性錯誤:

java.lang.NoSuchFieldError   虛拟機報找不到類的錯誤

java.lang.NoSuchFieldException  找不到你要通路的屬性

找不到所要查找的方法錯誤:

java.lang.NoSuchMethodError  虛拟機報找不到方法的錯誤

java.lang.NoSuchMethodException  找不到你要通路的方法

java.lang.OutOfMemoryError 虛拟機記憶體不足錯誤

byte[] b=new byte[1024*1024*1024]; 此種寫法會導緻記憶體不足就會報上面的錯誤

解決方案:使用-Xmx加給虛拟機記憶體

java.lang.VirtualMachineError 虛拟機錯誤

Exception 強制要求處理的異常類型

RuntimeException 不強制要求處理的異常類型

出現異常先看報錯的名稱或者編号,文法錯誤、平台錯誤、虛拟機錯誤是不可以處理的,隻有代碼運作時錯誤(資料不規範)可以使用try  catch異常處理代碼處理。例如:

<a href="https://s3.51cto.com/oss/201710/19/e01b501b289aeba0b8ebddbbe513b762.png" target="_blank"></a>

代碼示例:

<a href="https://s3.51cto.com/oss/201710/19/3f9849c546b06b243126bb85b26d569e.png" target="_blank"></a>

如何看報出的異常:

<a href="https://s5.51cto.com/oss/201710/19/f9bbd6ff2b7784a3f849fb44e2981a6c.png" target="_blank"></a>

第一句表示異常出現在哪個線程,類名表示的是錯誤的類型,上

圖這個就是一個空指針的異常類型,接着下面那幾句表示的是哪一個包下哪一個類的哪個方法和在第幾行代碼上。

在報異常時要看是自己寫的類,不要看其他不認識的類,例如:

<a href="https://s2.51cto.com/oss/201710/19/6eb2f0b8006d5ce673804bd8b3d7e733.png" target="_blank"></a>

本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/1974347,如需轉載請自行聯系原作者