您的位置:首页 > 编程语言 > Java开发

java异常情况分析

2016-07-10 13:36 239 查看
在java的编写过程中往往会产生一些使得java程序不能正常运行的代码

这种代码分为错误代码和异常代码,按我想法来说,就分为不可改正代码和可改正代码。

错误的代码是不能够继续执行下去的,如果一定要执行,就必须重写。而可改正代码也就是异常代码就可以通过我们一系列的操作去完成直至执行这一命令。

异常又分为受检异常(编译异常)和非受检异常(运行异常)。

受检异常:受检异常是在程序的编译过程中就已经发现的异常。是系统帮我们处理的一些异常。是直接继承于Exception的

非受检异常是在编译是没有收到异常提示,只是在运行时出现一些问题导致程序无法正常执行,比如说:

package com.huaxin.drawboard;
public class Test {
public static void main(String[] args) {
Test t =new Test();
int v =t.Div(20,0);
System.out.println(v);
System.out.println("欢迎来到衡阳");
}
public int Div(int a,int b){
int slov =a/b;
return slov;
}
}
上面的一个除非运算中,被除数不能为0,在运行时候才抛出,只是在编译过程中系统是没办法检测出来的,而在运行时,给出这样一串提示:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.huaxin.drawboard.Test.Div(Test.java:10)
at com.huaxin.drawboard.Test.main(Test.java:5)
非受检异常直接继承RunTimeException在继承于Exception的

对于异常,如果说已经预知到可能会出现异常。怎么去预防呢

通常我们采取两种方式去处理:

1)try catch语句去捕捉:

将我们要执行也就是已经预知到可能会出现异常的代码放到try中执行,如果出现异常则执行catch里面的程序,类型是

try{
///可能出现异常操作的程序
}catch(异常类型,异常变量){
///异常程序出现后执行的操作
}


当然,catch语句可以有很多(注:当很多个catch存在时,catch里面查找的异常类型必须是有小到大的,或者至少是同级别的,否则处理机制上会出现很多没必要的指令,程序也会报错,)最后也可以有一个finally语句,finally语句是一定执行的,也就是说不管这个异常是否出现,finally语句中的命令是一定执行的。

2)throws、throw语句直接舍弃掉次程序。舍弃是异常问题的另一个解决方法,也就是当这个异常问题出现时,我不管这个问题,直接舍弃掉进行下一步的出现运行。

:throws舍弃方式,是在这个运行程序的方法上面直接舍弃掉,逐层让上舍弃,最后交给我们的java虚拟机进行处理。

:throw舍弃方式,这个好像要配合try----catch方法共同执行,在catch中进行舍弃,上面说了,catch大括号里面输入的是出现异常的操作,所以我们可以在这里将整个异常的文件舍弃掉,当然最后也要用throws往上传递,最后交给java虚拟机处理,

处理异常情况是我们预知到可能会出现异常的情况进行,所以我们必须知道出现异常的类型,配合类型才能处理好两种方式的进行。

比如上面那个除法运算,运用throw方法执行

package com.huaxin.drawboard;
public class Test {
public static void main(String[] args)throws ArithmeticException{
Test t =new Test();
int v =t.Div(20,0);
System.out.println(v);
}
public int Div(int a,int b)throws ArithmeticException{
int slov=0;
try {
slov =a/b;
}
// catch (ArithmeticException e) {
// System.out.println("被除数不能为0,请确认你的算法");
// }
// 这里执行的是throw方法
catch(ArithmeticException e){
throw new ArithmeticException();
}
return slov;
}
}throws是不运用try-----catch方法而直接将程序扔出。

受检异常和非受检异常都可以用上面两种方法处理,不同的是受检异常中catch后面的出现的异常类型只能是try中出现的,不然程序会报错,而非受检异常是可以出现很多类型,并且不用管此类型在try中是否出现过。

异常检测是处理这个可能出现的异常,使得可以整个程序即使在异常出现的情况下,我的代码依然可以继续执行下去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: