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的用法了!

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值