java异常

try,catch,finally语句块的return的优先级由低到高,先执行try中return之前的语句,如果遇到异常,则执行catch语句中return之前的代码,最后执行finally语句块,finally语句块中如果有return,那么程序就会提前返回,如果没有,则返回catch语句块中的return,如果没有遇到异常,则直接执行finally中的语句块,再看finally语句块中是否有return来决定返回结果。

结论:

1、不管是否出现异常,finally块中的代码都会执行;

2、当try和catch中有return时,finally仍然会执行,finally中的return优先级大于catch大于try;

3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;

4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

绝大多数情况下,finally中的代码都是会被执行的,只有一种情况下,finally中的代码不会被执行,那就是在try语句块中结束掉了虚拟机(如:使用 System.exit(0); )。

public class Test {
    public static void main(String args[]){
        try{
            throw new NullPointerException("听说你很闲,给你抛个异常。");
        }catch (NullPointerException e) {
            System.out.println("这里捕获空指针异常,提示内容:" + e.getMessage());
            e.printStackTrace();
        }
    }
}

自定义异常
public class MyException extends Exception {
    public MyException() {
        super();
    }

    public MyException(String message) {
        super(message);
    }

    public MyException(String message, Throwable cause) {
        super(message, cause);
    }

    public MyException(Throwable cause) {
        super(cause);
    }

    protected MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

  

posted @ 2019-07-03 11:03  黑魔法os  阅读(180)  评论(0编辑  收藏  举报