首页 > 代码库 > 异常处理

异常处理

  健壮的程序应有的特征:用1/3的代码处理业务逻辑,2/3的代码处理可能出现的状况。异常提供了一种在不弄乱程序的情况下检查出程序中可能出现的异常状况的巧妙方式。异常是程序在执行过程中所产生的问题。在java中只有Throwable类型的对象能够被JVM抛出,而它有两个子类:Exception和Error。Error类是所有错误类的父类,Exception类是所有异常的父类,包括运行时异常和检查异常。在java语言中,通常用try/catch关键字来捕获异常,使用try和catch把可能产生异常的代码包围起来,其中的代码也称为“被保护的代码”。异常处理及声明的规则。这个规则指出一个检查异常要么被处理,要么被声明。处理异常是指异常的捕获,而声明异常是指一个方法在方法签名时使用throws关键字,但是声明的异常在该方法中不会被处理。但是,异常处理和声明规则不适用于运行时异常。如果程序导致了运行时异常,我们可以选择捕获这个异常,或者干脆忽略它使得程序崩溃。如果一个方法没有处理检查异常,那么该方法必须使用throws关键字来声明异常。关键字throws出现在方法签名的末尾。我们可以使用throw关键字来抛出异常,这个异常可以是一个新的异常实例,也可以是一个我们刚捕获的异常。throw语句将导致当前代码立即停止运行,而且异常将被抛给调用栈的前一个方法。关键字finally用于在try后创建一个代码块,finally的代码块总是会执行,不管异常是否发生,除非JVM停止运行。我们可以使用finally块来执行清理类型的语句。finally块出现在catch块的末尾。方法重写与异常。子方法不能抛出比父方法更多的异常。用户自定义异常。在java中,我们可以创建自定义异常。在编写自定义异常时,必须注意:所有的异常必须是Throwable的子类。如果我们想编写一个可以自动被异常处理货声明规则强制的检查异常,就需要继承Exception类。如果想编写一个运行异常,就需要继承RuntimeException类。大多数用户定义的异常类都被设计为检查异常,因而会继承Exception类。关键字try和catch用于创建被保护的代码。如果try块中有异常发生,那么相关的catch块就会去捕获该异常。如果异常的数据类型与catch块匹配,那么异常就不会传递给调用栈中的下一个方法。java.lang.Throwable类是所有异常的父类。它有两个子类:java.lang.Exception和java.lang.Error。用户自定义异常必须继承java.lang.Throwable,然而通常它要么继承Exception类,要么继承RuntimeException类。