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.*Error

    应用的递归调用的层次太深而导致堆栈溢出时抛出该错误,会直接导致程序崩溃。

    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)在你感觉可能出现问题的地方打个断点,就是在行号的左侧蓝颜色处双击,


     Android开发中的常见异常


        

      2)打上断点后就可以运行项目了,运行的方式有两种:

      a.在项目名称上右击---->Debug As --->Android Application  就可以运行了

       Android开发中的常见异常


          

        b.工具栏上方有Run这一项,点击Run --> Debug As --选择运行的项目即可

          3)当项目运行到断点时,


      Android开发中的常见异常


           下面如果把88行的代码注释掉,debug运行在看:

       Android开发中的常见异常


        

            可以看到debug调试出来的89行的变量为null,也就是空指针Exception! 

           另外介绍它的两个小用法:

       point1.点击工具栏的红色按钮可以终止debug运行模式:


           Android开发中的常见异常


        point2.看下面这张图,有两个红色箭头所指的黑色叉号,如果你在整个项目的不同类中打了n多个断点,想要马上全部取消的话,点击有两个黑色叉号的按钮即可;如果想一个一个取消断点的话,就先选中断点所在的行,如下图,然后再点有一个叉号的按钮


          Android开发中的常见异常

      


     这就是debug的用法了!


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