try 、catch、finally用法总结

本文详细介绍了Java中try-catch-finally语句的使用,包括异常处理流程、返回值处理以及finally在不同情况下的执行。强调了finally在何时执行、如何影响返回值以及在finally中使用return的影响。同时,提供了面试题解析,帮助理解try-catch-finally的执行机制。
摘要由CSDN通过智能技术生成
1. try 、catch、finally用法总结
    1、在进行异常的处理之后,在异常的处理格式中还有一个finally语句,那么此语句将作为异常的统一出口,不管是否产生了异常,最终都要执行此段代码。
    2、当try、catch中有return时,finally中的代码依然会继续执行
    3、finally是在return后面的表达式运算之后执行的,此时并没有返回运算之后的值,而是把值保存起来,不管finally对该值做任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的返回值是在finally运算之前就确定了的。
    4、finally代码中最好不要包含return,程序会提前退出,也就是说返回的值不是try或catch中的值

2. try+catch的处理流程
    1、 一旦产生异常,则系统会自动产生一个异常类的实例化对象。
    2、 那么,此时如果异常发生在try语句,则会自动找到匹配的catch语句执行,如果没有在try语句中,则会将异
    常抛出.
    3、 所有的catch根据方法的参数匹配异常类的实例化对象,如果匹配成功,则表示由此catch进行处理。
3. 当我们操作引用数据类型的时候返回值是什么呢?
public class Demo {
    public static void main(String[] args) {
        Person p = haha();
        System.out.println(p.age);
    }
    public static Person haha(){
        Person p = new Person();
        try {
            p.age = 18;
            return p;   //被保存起来
        }catch (Exception E){
            return null;
        }finally {
            p.age = 28;
        }

    }
    static class Person{
        int age;
    }
}
结果 
​	28

总结:

​ return p 是把引用数据(堆中)地址保存起来(18),finally再赋值的时候,该地址内容变为28,所以返回28.

4. 当我们操作数据类型的时候返回值是什么呢?
public class Demo1 {
    public static void main(String[] args) {
        int a  = haha();
        System.out.println(a);
    }
    public static int haha(){
        int a = 10;
        try {
            return a;   //被保存起来
        }catch (Exception E){
            return 0;
        }finally {
            a = 20;
        }

    }
}
结果
	10

总结:

​ 基本数据类型创建的时候在栈中,当我们返回a的时候会先保存起来,后面finally再赋值的时候,a的值为20,但返回的是被保存起来的值,所以值没有变化,还是10.

5. 如果在finally添加返回值
public class Demo1 {
    public static void main(String[] args) {
        int a  = haha();
        System.out.println(a);
    }
    public static int haha(){
        int a = 10;
        try {
            return a;   
        }catch (Exception E){
            return 0;
        }finally {
            a = 20;
            return a;
        }

    }
}
结果
	20

总结:

​ 明显,当try或者catch中有返回值,但是finally中也有返回语句时,最终返回的是finally中的返回值.

几个面试题:
1. try-catch-finally 中哪个部分可以省略?
	答: catch和finally可以省略其中一个 , catch和finally不能同时省略
	注意:格式上允许省略catch块, 但是发生异常时就不会捕获异常了,我们在开发中也不会这样去写代码.
2. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
	答:finally中的代码会执行
	详解:
	执行流程:
	(1) 先计算返回值, 并将返回值存储起来, 等待返回
	(2) 执行finally代码块
	(3) 将之前存储的返回值, 返回出去;
	需注意:
	(1) 返回值是在finally运算之前就确定了,并且缓存了,不管finally对该值做任何的改变,返回的值都不
	会改变
	(2) finally代码中不建议包含return,因为程序会在上述的流程中提前退出,也就是说返回的值不是try或
	catch中的值
	(3) 如果在try或catch中停止了JVM,则finally不会执行.例如停电- -, 或通过如下代码退出
	JVM:System.exit(0);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值