Java编程思想读书笔记-5(第10章)
第10章 通过异常处理错误
一. 基本异常
1. 抛出异常的原理
1) 像产生一个Java对象那样在heap上以new产生一个异常对象。
2) 停止目前的执行路线,将上述那个异常对象的reference自目前的context丢出。
3) 异常处理机制接手工作,寻找得以继续执行的适当地点。
2. 产生一个异常对象
异常类有两个构造函数:一个default构造函数;一个带String型参数的构造函数,参数的信息可以通过异常类中的各种方法取出。
3. 异常类的结构
1) Error是一些编译期错误或系统错误,一般无需在程序中捕捉到Error异常。
2) Exception是我们能捕捉到的异常,其中Exception异常又分为RuntimeException和non-RuntimeException两大类异常。
二. 异常的捕捉和处理
1. 异常的捕捉
1.1 通过try…catch就可捕捉异常
- import java.lang.RuntimeException;
- import java.lang.NullPointerException;
- import java.sql.SQLException;
- import java.io.IOException;
- class TestException{
- public void testSQLException() throws SQLException {
- throw new SQLException();
- }
- public void testIOException() throws IOException {}
- }
- public class Test{
- public static void main(String[] args){
- TestException te = new TestException();
- try{
- te.testSQLException();
- te.testIOException();
- }
- catch(SQLException ex){
- System.out.println("catch SQLException in main");
- }
- catch(IOException ex){
- System.out.println("catch IOException in main");
- }
- catch(Exception ex){ //(1)
- System.out.println("catch Exception in main");
- }
- }
- }
运行结果为:catch SQLException in main
只有参数类型与异常类型相同或相近的catch会被执行。
1.2 捕捉所有异常
如果想捕捉所有异常,只要捕捉Exception异常就行,如上面代码的(1)处
2. 异常规格(exception specification)
1) 在函数定义时可以声明异常规格。如果一个函数在异常规格中声明了non-RuntimeException异常,那么当调用这个函数时,就一定要捕捉异常规格中的non-RuntimeException异常。
- import java.lang.RuntimeException;
- import java.lang.NullPointerException;
- import java.sql.SQLException;
- class TestException{
- //(1)异常规格中声明将抛出RuntimeException异常
- public void testRuntime() throws RuntimeException {}
- //(2)异常规格中声明将抛出NullPointerException异常
- public void testNullPointer() throws NullPointerException {}
- //(3)异常规格中声明将抛出non-RuntimeException异常
- public void testNonRunti
补充:软件开发 , Java ,