1.什么是异常?
所谓异常即是指可能由于外部系统的,导致程序可能出错或中断的原因。
2.常见的一些异常
空指针 NullPointerException
数组下表越界 ArrayIndexOutOfBoundsException
栈溢出
文件不存在 UnsupportedOperationException
类型转换异常 ClassCastException
参数为负数 IllegalArgumentException
算术错误 ArithmeticException
3.异常的分类:
首先,异常分为强制异常和非强制异常。
非强制异常是指那些因为程序出错或者说以为代码问题而导致的错误,如上面所写的空指针,数组下标越界,类型转换异常等等,因为代码而导致程序出错。
强制异常是指一些程序员未能解决的一些程序漏洞,为了防止出错,抛出的异常。这种异常是有程序员考虑故意抛出所形成的。强制异常是可以再JDK的API中具体寻找
4.非强制异常的分析与处理方式
(1).根据异常类,来确定异常是有上面原因形成,可以在(JDK的API中查询)
(2).异常类后边一般会有提示信息,可以进一步诊断。
(3).找到出错的位置,找到第一个由自己写的类,然后双击,就能找到出错行。
(4).分析自己代码出错的原因,可以用输出函数即System.out.println();判断程序运行到哪里出错的《《《《号称最强大的检测方法。
(5).找到出错位置修改成正确的代码
5.强制异常从哪里来:
前面已经说过,强制异常一般是程序员自己不能解决防止出错自己抛出的,或者不愿解决异常继续向外抛出的。所以强制异常一般的来源是:要么是自己不能解决漏洞抛出的,要么是不愿解决或解决不了继续向外抛出的。
6.强制异常的分析和处理方式:
面对强制异常,我们一般有两个解决方式,要么就解决这个异常,要么就把异常继续向外抛,让调用的人自己去解决,即别人帮你解决。
(1)自己解决异常:
一般自己解决异常都常用try,catch,finally处理机制,如try{
file.createNewFile();
}catch(FileNotFoundException ffe){
}finally{
}
这里就解决了创建文件时所抛出的异常,catch中所写应为如果出错,那么执行的代码,finally中所写一般为不管是否出现异常都要执行的代码,如有时需关闭程序等操作就可以写入其中。
值得注意的是,如果try中有两个可能抛出异常的代码,应相应的用两个catch来解决异常,但如果第一个抛出异常,将不会执行第二个代码。
如try{
file.createNewFile();
new Robot();
}catch(FileNotFoundException ffe){
}catch(AWTException e){
}finally{
}
如果file.createNewFile(); 抛出异常,则new Robot();不再执行,而是直接跳到catch(FileNotFoundException ffe)中去。
(2)继续向外抛出
有的时候我们也不能解决异常,或者没必要,或者不想解决这个异常的时候,就可以继续向外抛出异常,程序员向外抛出异常的时候,要用到throw,向外抛出一个异常,而当我们继续向外抛出的时候则需要用到关键字throws
如:publuc class createfile throws IOException{
File file = new File(path);
file.createNewFile();
}
这样我们就继续向外抛出了这个异常,留给别人解决。值得注意的是,这种方式虽然简单,但是却没有解决实际问题,所以要慎用。
(3)注意两种方法的使用范围
一、自己写软件时,由于是直接面对客户,所以出现异常就必须要处理掉,尽量不要往外抛出异常,这样体验度才会高。
二、写第三方的插件时,就要想着外抛出异常,否则当出现错误的时候,别人却找不到出错源,会到来很多麻烦,所以就不需要去处理异常。
7.Debug模式调试错误
在java中有一种Debug的调试模式,可以用来调试,找出错误源,对于熟悉的人可能比较方便,但对于不熟悉的人来说,反而会很麻烦。所以在对异常进行处时,个人建议还是用史上最强大的调试方式,System.out.println(); 功能强大,使用方便,范围广泛,不用不知道,一用吓一跳!是居家旅行,调试查错的必备方法,是程序员的春天!
8.that's all,thank you !!