1. 程式人生 > >Android開發中的常見異常

Android開發中的常見異常

         ***********************************************************************************************************************************************************************************

         記得之前學習的時候,聽一些技術大牛說過,一套好的程式不是編出來的,而是調出來的,調的是什麼呢,就是bug,異常,後來在工作之後,隨著接觸的應用專案不斷增多,也越來越明白這句話的正確性。今天就把自己在開發中所遇到的一些異常列舉出來,和大家分享,有哪些理解不到位的地方,希望大家可以多提意見。

       首先先說一下什麼是異常機制,異常機制是指當程式出現錯誤後,程式如何處理。具體的說,異常機制提供了程式退出的安全通道。當出現錯誤後,程式執行的流程發生改變,程式的控制權轉移到異常處理器。

       a.空指標異常 java.lang.NullPointerException

       有物件的宣告, 卻沒有給物件在堆中開闢記憶體,這時當呼叫物件的屬性或方法就會丟擲該異常

         b.強制轉換異常java.lang.ClassCastException

需要轉換的物件與向上或者向下轉換的例項沒有關係的時候,強制轉換會報此異常,比如

   ListView listView = (ListView)findViewById(R.id.textview);

   通過findViewById()方法,找到的是一個TextView物件,返回的是一個view物件,但向下轉型的目的例項與TextView不是一類,所以會報異常.   

   c.下角標越界異常java.lang.ArrayIndexOutOfBoundsException

 我們都知道,我們可以通過一個指定的容器(如陣列或者集合)的角標來對該容器進行增刪改查操作,當你需要的角標數值不在指定的容器中時,就會報出此異常。比如一個裡面有10個例項的集合,如果你呼叫的角標不在0~9這個範圍內的話就會報此異常。

   d.轉換類異常  java.lang.ClassNotFoundException

轉換的目的類不存在就會導致此異常產生

   e.記憶體不足 java.lang.OutOfMemoryError

當執行一個程式的時候,手機的可用記憶體不足以讓java虛擬機器給一個物件記憶體空間時

       f.棧溢位錯誤 java.lang.StackOverflowError

 應用的遞迴呼叫的層次太深而導致堆疊溢位時丟擲該錯誤,會直接導致程式崩潰。

       g.算數異常 java.lang.ArithmeticException

呼叫除法運演算法則,除數為零的話,就會報此異常

       h. 非法訪問異常 java.lang.IllegalAccessException

應用通過反射方式建立某個類的例項、訪問該類屬性、呼叫該類方法,但是又沒有訪問類的屬性、方法的構造方法定義時

       例如,你定義的某個包的類的許可權為protected,當其他的包下的類需要訪問時,又因為沒有這個許可權,就會丟擲此異常

       i. 沒有這個方法 java.lang.NoSuchMethodException

呼叫某個類不存在的方法時,丟擲此異常

       g.沒有這個屬性 java.lang.NoSuchFieldException

呼叫某個類不存在的屬性時,丟擲此異常

       k. 數字格式異常 java.lang.NumberFormatException

被轉換的資料不能滿足指定資料型別出現此異常,如(int 轉換為字串,boolean轉換為字串)

 既然程式有bug,就需要修改bug,這時當程式寫了無數行程式碼,再因為其中的一個bug逐行找問題就顯得很費事了,我一般是用debug除錯,下面就把debug除錯的方法順便寫一下:

       1)在你感覺可能出現問題的地方打個斷點,就是在行號的左側藍顏色處雙擊,

         

       2)打上斷點後就可以執行專案了,執行的方式有兩種:

           a.在專案名稱上右擊---->Debug As --->Android Application  就可以運行了

 

           b.工具欄上方有Run這一項,點選Run --> Debug As --選擇執行的專案即可

           3)當專案執行到斷點時,

            

           下面如果把88行的程式碼註釋掉,debug執行在看:

            

             可以看到debug調試出來的89行的變數為null,也就是空指標Exception! 

             另外介紹它的兩個小用法:

     point1.點選工具欄的紅色按鈕可以終止debug執行模式:

            

             point2.看下面這張圖,有兩個紅色箭頭所指的黑色叉號,如果你在整個專案的不同類中打了n多個斷點,想要馬上全部取消的話,點選有兩個黑色叉號的按鈕即可;如果想一個一個取消斷點的話,就先選中斷點所在的行,如下圖,然後再點有一個叉號的按鈕

              

              這就是debug的用法了!

         ***********************************************************************************************************************************************************************************