异常处理try-catch-finally笔记

当程序发生异常时,咱们指望:返回到一种安全状态,并可以让用户执行一些其余的命令;或者 容许用户保存全部操做的结果,并以适当的方式终止程序。java

异常处理机制:程序的执行过程当中若是出现异常,会自动生成一个异常类对象,该异常对象将被提交给java运行时系统,这个过程成为抛出(throw)异常。Java运行时系统接收到异常对象时会寻找处理这一异常的代码,并把当前异常对象交给它处理,这一过程称为捕获(catch)异常。若是java运行时系统未能找到能够捕获异常的方法,则运行时系统将会终止,相应的程序也将退出。数组

全部的异常都是由Throwable继承而来,但在下一层当即分解为两个分支:Error和Exception。安全

Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。函数

Exception层次结构。这个层次结构又分解为两个分支:一个分支派生于RuntimeException;另外一个分支包含其余异常。划分两个分支的规则是:由程序错误致使的异常属于RuntimeException;而程序自己没有问题,但因为像I/O错误这类问题致使的异常属于其余异常。this

派生于RuntimeException的异常包含下面几种状况:spa

  • 错误的类型转换。指针

  • 数组访问越界。code

  • 访问空指针。对象

不是派生于RuntimeException的异常包括blog

  • 试图在文件尾部后面读取数据。

  • 试图打开一个错误格式的URL

  • 试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在。

“若是出现RuntimeException异常,那么就必定是你的问题”

细节:

1、若是try中语句正确,将不会执行catch中的语句;若是try语句中发生异常,try中该语句后的语句将不会继续执行,而是当即返回一个异常对象与catch中的异常对象进行匹配,若是匹配成功,将从catch后面就继续执行(也就是说try中后面的语句不会被执行了);

2、能够写多个catch语句,注意他们的前后顺序,子类必须在父类以前,不然父类型必定先于子类型被匹配,全部子类型就没有机会执行了。JAVA编译出错。

3finally语句块是必须被执行的(由于finally子句的这个特性,因此通常将释放资源,关闭链接的语句写在里面)。

4、若是try{}中有个return语句,那么finally中的代码是否被执行呢?答案是执行的,并且在return前执行。

int f(int n)
{
    try{
        System.out.println("n = "+n);//下一条是return语句,因此从这里跳入finally语句,执行完finally语句后再执行下面的return语句
        return n*n;//因为先执行finally语句且函数被返回,此语句将不被执行了,若是finally中没有return语句,将在执行finally后执行它。
    }catch(Exception e){

    } finally {
        System.out.println("do this?");
        return n;
    }
}
相关文章
相关标签/搜索