***************************************************************************************************************************************************************************************
记得之前学习的时候,听一些技术大牛说过,一套好的程序不是编出来的,而是调出来的,调的是什么呢,就是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的用法了!
***************************************************************************************************************************************************************************************