学习异常处理-自定义异常类与finally无法修改retrun,throw等终止语句的内容

class MyException extends  RuntimeException{
    public MyException(){}
    public MyException(String message){super(message);}

}
public class 异常处理 {
    public static void main(String[] args)  {
/*
五 finally代码块
    起因: 垃圾回收机制不会回收任何物理资源,只会回收堆内存中的对象所占的内存
    注意:
        1 正常情况下finally语句永远可以得到执行,即使try块或catch块执行return或throw等方法退出的语句,现在知道为什么它叫finally了吧
        (System.exit(1)执行导致退出虚拟机除外,当然没人这么干,还是记住那句话,正常情况下finally语句永远可以得到执行)
        2 不要在finally块中使用或throw等导致方法退出的语句.(因为这将导致try块或catch块的return,throw语句失效.)
        3 finally无法修改try或catch块中return返回的值和throw语句的内容,即使修改的return或throw语句中中变量的值也如此
        因为return返回的值已经被执行了,产生了一个结果x,此时才执行finally语句,最后返回x结果.
        (执行finally语句前return语句的返回值结果已经产生.)
*/
        //下面语句输出说明finally无法修改该return返回值
        System.out.println(testReturn());//吃饭了1111111111111111111111


        try {
            System.out.println(testThrow());
        } catch (MyException e) {
            //下面语句输出说明finally无法修改该throw语句内容
            System.out.println(e.getMessage());//吃饭了2222222222222222222
        }

    }

    public static String test(String s) {return s;}
    public static String testReturn() {
        String message = "吃饭了";
        try {
            return test(message) + "1111111111111111111111";
        } finally {
            message = "good";//修改message变量
        }
    }

    public static String testThrow() {
        String message = "吃饭了";
        try {
            throw new MyException(message + "2222222222222222222");
        } finally {
            message = "good";//修改message变量
        }
    }

}

运行结果如下:

吃饭了1111111111111111111111
吃饭了2222222222222222222

posted @ 2022-05-18 12:08  -和时间赛跑-  阅读(22)  评论(0编辑  收藏  举报