转载

java学习笔记(7)——异常

异常

在Java等面向对象的编程语言中, 异常本身是一个类

产生异常就是创建异常对象并抛出了一个异常对象。

Java中处理方式为 中断处理

异常的产生过程:

二、异常的处理

java处理异常的五个关键字:try, catch, finally, throw, throws

2.1抛出异常throw

作用:

使用throw关键字在指定的方法中抛出指定的异常

使用格式:

throw new xxxException("异常产生的原因");

注意:

1.throw关键字必须写在方法的内部

2.throw关键字后边new的对象必须是Exception或者Exception的子类

3.throw关键字抛出指定的异常对象,就必须处理这个异常对象

throw关键字后边创建的是RuntimeException或者RuntimeException的子类对象,我们可以不处理,默认交给JVM处理
throw关键字后边创建的是编译异常,我们就必须处理这个异常,要么throws,要么try...catch...

2.2声明异常throws

作用:

当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象,

可以使用throws关键字处理异常对象,把锅抛给JVM处理 --> 中断处理

使用格式:

修饰符 返回值类型 方法名(参数列表) throws AAAException{
    throw new AAAException("产生原因");
}

注意:

2.throws后面声明的异常必须是Exception或者Exception的子类
3.方法内部如果抛出多个异常,throws后面也必须声明多个异常, 如果抛出的多个异常对象有父子类关系,直接声明父类
4.调用了一个声明异常的方法,就必须处理声明异常, 要么继续使用throws声明抛出,最终交给JVM 要么try...catch...自己处理异常

2.4捕获异常try...catch

格式:

try {
    可能产生异常的代码
}catch(定义异常的变量,用来接收try中抛出的异常对象) {
    异常的处理逻辑,之后是如何处理异常对象
    一般工作中,会把异常的信息记录到一个日志中
}
...
catch(异常类名 变量名) {

}

注意:

1.可以抛出多个异常对象,可以使用多个catch

2.try中产生异常,执行catch,之后继续执行try...catch之后的代码

如果try中没有产生异常,就不会进入catch,执行完try直接执行后续代码

java学习笔记(7)——异常

try...catch与throw的区别:

try...catch可以执行后续程序

throw则是中断程序

2.5finally代码块

一定要执行的代码

无论异常发生不发生,都需要执行

而且出现程序跳转,部分代码会执行不到

格式:

try{
        ...
    }catch() {
        ...
    }
    ...
    catch() {
    
    }finally {
        //无论是否异常均会执行的代码
    }

注意:

1.finally必须和try一起使用

2.finally一般用于 资源释放 ,程序最后均要资源释放

java学习笔记(7)——异常

三、异常注意事项

1.多个异常分别处理

java学习笔记(7)——异常

还可以执行后续代码

2.多个异常,一次捕获(try),多次处理(catch)

java学习笔记(7)——异常

catch里边定义的 异常变量 ,如果 有父子类 关系,那么 子类的异常变量必须写在上边 ,否则报错(与多态知识相关)

java学习笔记(7)——异常

对于try里面发生的异常,他会根据发生的异常和catch里面的进行匹配(怎么匹配,按照catch块从上往下匹配),

当它匹配某一个catch块的时候,他就直接进入到这个catch块里面去了,后面在再有catch块的话,它不做任何处理,直接跳过去,全部忽略掉。

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

public static int demo4() {
        int i = 0;
        try {
            return i;
        } finally {
            i = 12;
            System.out.println("finally trumps return.");
            return i;
        }
    }
    //输出结果
    finally trumps return.
    12

经典面试题!!!!!!

public static int demo5() {
        try {
            return printX();
        }
        finally {
            System.out.println("finally trumps return... sort of");
        }
    }
    public static int printX() {

        System.out.println("X");
        return 0;
    }
    
    //输出结果
    X 
    finally trumps return... sort of 
    0
原文  https://segmentfault.com/a/1190000023369252
正文到此结束
Loading...