您的位置:首页 > 其它

Try-catch-finally基本定义与使用

2019-02-19 10:22 211 查看

Java处理异常

语法

try{
//业务逻辑代码块
}catch(Exception e){
//异常处理
}finally{
}
  1. try{ }是用于执行逻辑代码,逻辑代码在执行出现异常会进入catch{ }里进行处理;

  2. catch{ }是来处理try{ }里的代码运行时抛出的异常,try{ }执行时出现异常catch{ }才会进行异常处理,里面的代码才会执行,否则catch{ }不会执行;

  3. 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流等;

初入茅庐看到此文章如有不妥,还望各路大神批评指正

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: