欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

try,catch,finally,throw,throws

程序员文章站 2022-03-07 22:40:19
...

try catch finally

对可能出现错误的代码进行异常的捕捉和处理会使程序更加健壮稳定。通常使用try catch finally 来捕捉处理。

try{可能出现错误的代码} try把可能出现错误的代码放在一块。
catch(Exception e){捕捉到异常的处理方式}在catch中对捕捉到的异常进行处理。
finally{在异常处理后进行的操作,通常是一些关闭连接等的操作}

执行顺序:

//代码:
public class MyException {
    public static int showDetails() {
        int i=0;
        try {
            System.out.println("在错误之前调用!i的值是"+(++i));
            String string=null;
            string.charAt(1);
            System.out.println("在错误之后调用!i的值是"+(++i));
            return i;
        }catch (NullPointerException exception){
            System.out.println("在catch中调用!i的值是"+(++i));
            return i;
        }finally {
            // TODO: handle finally clause
            System.out.println("在finally调用!i的值是"+(++i));
            return i;
        }

    }
    public static void main(String[] args)  throws NullPointerException{
        // TODO Auto-generated method stub
            System.out.println("最终i的返回值是:"+showDetails());
    }

}
//输出结果:
在错误之前调用!i的值是1catch中调用!i的值是2finally调用!i的值是3
最终i的返回值是:3
执行顺序 进入try语句块-->异常点(如果有)-->catch异常处理或其他语句-->catch中的return-->进入finally块(如果有)-->finally中的return-->跳出异常块-->继续执行-->直到函数结束。
1.必须点,trycatch一起出现如果没有catch中的异常处理,异常的捕捉是无意义的。
2.如果有finally,他一定会在catch后执行。
3.关于return,如果try catch finally中有returntry中异常代码后的return不会被执行,如果catchfinally中有return那么异常块后面的return是无意义的。
4.catch中的return会优先finally中的return执行,但不会立即返回。
5.finally中如果无return时则执行完finally中的异常处理时,函数会返回catch中的return值,如果finally中有return,则会返回finally中的return值。
6.当异常块无return时,异常处理完毕,异常块后面的语句会继续执行。所以trycatch中还是有必要使用return的,除非你的trycatch是函数的最后一个操作性语句块。

throws和throw

1、throws出现在方法函数头;而throw出现在函数体。
2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
3、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
    public static void main(String[] args)  throws NullPointerException, TimeoutException{
        // TODO Auto-generated method stub
            System.out.println("最终i的返回值是:"+showDetails());
            throw new TimeoutException();
    }

编程习惯:

1.在写程序时,对可能会出现异常的部分通常要用try{...}catch{...}去捕捉它并对它进行处理;
2.用try{...}catch{...}捕捉了异常之后一定要对在catch{...}中对其进行处理,那怕是最简单的一句输出语句,或栈输入e.printStackTrace();
3.如果是捕捉IO输入输出流中的异常,一定要在try{...}catch{...}后加finally{...}把输入输出流关闭;
4.如果在函数体内用throw抛出了某种异常,最好要在函数名中加throws抛异常声明,然后交给调用它的上层函数进行处理。

MARK(13)

宠 辱 若 惊 ,贵 大 患 若 身 。何 谓 宠 辱 若 惊 。 宠 为 下 ,得 之 若 惊 , 失 之 若 惊 ,是 谓 宠 辱 若 惊 。何 谓 贵 大 患 若 身 。吾 所 以 有 大 患 者 ,为 吾 有 身 ,及 吾 无 身 ,吾 有 何 患 。故 贵 以 身 为 天 下 ,若 可 寄 天 下 ﹔爱 以 身 为 天 下 ,若 可 托 天 下 。