Java处理异常
语法
try{
//业务逻辑代码块
}catch(Exception e){
//异常处理
}finally{
}
-
try{ }是用于执行逻辑代码,逻辑代码在执行出现异常会进入catch{ }里进行处理;
-
catch{ }是来处理try{ }里的代码运行时抛出的异常,try{ }执行时出现异常catch{ }才会进行异常处理,里面的代码才会执行,否则catch{ }不会执行;
-
finally{ }无论try{ }有没有异常都会执行(最好不要再finally里写return);
- 异常处理准则(** 很重要可以帮助我们准确定位问题 **)
- 抛出和捕获异常可以抛给JVM处理,也可以使用try catch捕获 ,对于资源使用Try-With- Resource
- 底层代码抛出异常尽量做到处理此异常,不建议继续向上曾抛应及时处理
- 异常不要忽略,不要打印异常日志的同时将其抛出
- 优先捕获明确异常,不建议直接抛出Exception
- 抛出非运行时异常必须对其进行处理
示例代码
public static void main(String[] args) {
try {
System.out.println("try 执行");
int a = 1/0; //模拟异常
} catch (Exception e) {
System.out.println("catch 执行");
} finally {
System.out.println("finally 执行");
}
}
控制台输出结果
try 执行
catch 执行
finally 执行
根据判定结果而定,执行顺序为try{ } catch{ } finally{ }
下面介绍三个代码块有return的执行顺序
1.public static void main(String[] args) {
Test t = new Test();
System.out.println("main i"+t.demo());
}
public int demo(){
int i = 0;
try {
i++;
System.out.println("try {} i="+i);
return i;
} catch (Exception e) {
e.printStackTrace();
System.out.println("catch {} i="+i);
return i;
} finally {
i=10;
System.out.println("finally {} i="+i);
}
}
执行结果
try {} i=1
finally {} i=10
main i=1
先是先执行了try里的 i++ ;紧接着跳到finally里执行 i=10,并且输出,最后才执行try里的return i;
2.public int demo(){
int i = 0;
try {
i++;
System.out.println("try {} i="+i);
i=i/0;//模拟异常
return i;
} catch (Exception e) {
e.printStackTrace();
System.out.println("catch {} i="+i);
return i;
} finally {
i=10;
System.out.println("finally {} i="+i);
return i;
}
}
执行结果
try {} i=1
catch {} i=1
finally {} i=10
main i=10
先执行了try里的i++,输出i结果,然后模拟异常进入到catch里执行输出i结果,最后跳到了finally里执行赋值并
输出且return i 值,main 输出i=10,
执行顺序总结
try catch finally 无论如何执行都会执行finally里的代码,即使抛出异常也会执行,就说明如果在try里写的逻辑处理代码和一系列的运算逻辑处理最后写了return返回给上层调用,
但是此时有finally块,里面写了return ,根据测试验证结果无论怎么执行都会执行finally,这就意味着try里的逻辑处理和返回没有丝毫意义,最后都被这个finally干死了,然后try里的return就不在执行了,所以强烈不建议在finally里写return!
try里是写逻辑代码的,写什么样的逻辑代码呢?
答:try是做异常处理的,当然是写可能会抛异常的代码
- 关于catch的用法我会在后期更新里详细分析
简说finally
finally可以省略不写;
finally适合做资源释放,如JDBC连接,IO流等;
初入茅庐看到此文章如有不妥,还望各路大神批评指正