您的位置:首页 > 编程语言 > Java开发

浅谈Java异常

2017-01-16 20:47 344 查看
 何为异常?当Java程序违背了Java的语义规则时,Java虚拟机就会将发生的错误表示为一个异常。

 java.lang.Throwable是所有异常的父类!

Throwable有两个子类,分别是Error,Exception.

      Error表示非常严重的错误,恢复是一件很困难的事情。

      Exception表示一种设计或实现的问题。而Exception又分为受检异常和非受检异常:

               1.受检异常(CheckedException):需要抛出异常或用try...catch语句显示的捕获,比如IOException.

                2.非受检异常或运行时异常(RuntimeException):不需要用try...catch语句显示的捕获异常,

                   常见的有:

                                   NullPointerException--------空指针异常

                                   ClassCastException--------类型强制转换异常

                                   IndexOutOfBoundsException--------数组下标越界异常

                                   IllegalArgumentException--------传递非法参数异常

 异常捕获:

       对于try..catch捕获异常的形式来说,对于异常的捕获,可以有多个catch。

       对于try里面发生的异常,他会根据发生的异常和catch里面的进行匹配(怎么匹配,按照catch块从上往下匹配),当它匹配某一个catch块的时候,他就直接进入到这个catch块里面去了,后面在再有catch块的话,它不做任何处理,直接跳过去,全部忽略掉。如果有finally的话进入到finally里面继续执行。

       换句话说,如果有匹配的catch,它就会忽略掉这个catch后面所有的catch。

关于finally的面试题:

public class Test{
    public static void main(String[] args){
        System.out.println(new Test().test());
    }
    public int test(){
        int res = 1;
        try{
            throw new Exception();
        }catch(Exception e){
            return res;
        }finally{
            res = 2;
            System.out.println("finally");
        }
    }
}

程序输出结果为:
   finally
   1

解释:

    return之前跳到finally,此时要return 的值已经被存到一个局部引用变量里了,finally中对res的改变对返回值没有影响
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: