异常的继承结构:
基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。
Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。
1、 SQLException:操作数据库异常类。
问题:当Java应用程序与数据库进行沟通时如果产生了错误,就会触发这个类。同时会将数据库的错误信息通过这个类显示给用户。当用户插入数据的时候,如果这个字段的值跟现有的纪录重复了,违反了数据库的唯一性约束,此时数据库就会跑出一个异常信息。这个信息一般用户可能看不到,因为其发生在数据库层面的。此时这个操作数据库异常类就会捕捉到数据库的这个异常信息,并将这个异常信息传递到前台。如此的话,前台用户就可以根据这个异常信息来分析发生错误的原因。
解决方案:检查插入的数据是否重复。
2、 ClassCastException:数据类型转换异常。
问题:在Java应用程序中,有时候需要对数据类型进行转换。这个转换包括显示的转换与隐式的转换。不过无论怎么转换,都必须要符合一个前提的条件,即数据类型的兼容性。在数据类型进行转换之前,就保证数据类型的兼容性。如此的话,就不容易造成数据类型的转换异常。如在只允许数值类型的字段中,可以设置不允许用户输入数值以外的字符。
解决方案:注意相应的组件在初始化的时候,是否相对应。
3、 NumberFormatException:字符串转换为数字类型时抛出的异常。
在数据类型转换过程中,如果是字符型转换为数字型过程中出现的问题,对于这个异常在Java程序中采用了一个独立的异常,即NumberFormatException.如现在讲字符型的数据“123456”转换为数值型数据时,是允许的。但是如果字符型数据中包含了非数字型的字符,如123#56,此时转换为数值型时就会出现异常。系统就会捕捉到这个异常,并进行处理。
解决方案:检查数据是否正确。
- java.lang.NullPointerException
(1).如果使用第三包的jar包,jar包中有错误
(2).没有实例化组件
(3).没有把Adapter和值绑定;
(4).当页面中某个组件赋值为null时activity会出现错误,程序崩溃后其他页面的数据就会被重新初始化
(5).用Intent传值时,获取的key不存在
(6).没有赋初始值
- java.lang.ClassNotFoundException 异常的解释是"指定的类不存在"。
- java.lang.ArithmeticException 这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常。
- java.lang.ArrayIndexOutOfBoundsException
异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。 - java.lang.IllegalArgumentException
这个异常的解释是"方法的参数错误",比如g.setColor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。
- java.lang.IllegalAccessException
这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注意这个异常
10.安全异常:产生的原因是由于当前的设备不支持当前程序,这个是由于机型产生的问题,我们应该换一个设备进行测试,检测当前程序存在什么样的异常;另一种原因是获取激活的网络信息实体类,需要添加权限,否则会出现此异常
解决办法:在配置文件中,添加android_permission_Access_NetWork_State的权限
- RejectExcuteException:一个异步任务只能执行一次,否则会报异常
一个线程最多能执行5个线程,超出则等待,否则会报拒绝执行的异常
解决办法:使用子线程+handler来代替AsyncTask,或者一个线程中少添加几个异步操作。
Out of memory:内存溢出是存放的数据过多导致内存不足的溢出事件
Memory leak:内存泄露是本应该释放的资源没有充分得到释放,就继续添加数据导致内存泄露事件;
Java应用程序中常见的异常类还有很多。如未找到相应类异常、不允许访问某些类异常、文件已经结束异常、文件未找到异常、字段未找到异常等等。一般系统开发人员都可以根据这个异常名来判断当前异常的类型。
ArithmeticException(除数为0的异常), BufferOverflowException(缓冲区上溢异常), BufferUnderflowException(缓冲区下溢异常), IndexOutOfBoundsException(出界异常), NullPointerException(空指针异常), EmptyStackException(空栈异常), IllegalArgumentException(不合法的参数异常), NegativeArraySizeException, NoSuchElementException, SecurityException, SystemException, UndeclaredThrowableException