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

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


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

猜你喜欢

转载自blog.csdn.net/qq_20395393/article/details/87632965