image.png

    • try:

    try语句指定了一段代码,该段代码就是异常捕获并处理的范围。在执行过程中,当任意一条语句产生异常时,就会跳过该条语句中后面的代码。代码中可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理。
    一个try语句必须带有至少一个catch语句块或一个finally语句块。
    注意事项

    • 当异常处理的代码执行结束以后,不会回到try语句去执行尚未执行的代码。

    • catch:

    1. 每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。
    2. catch捕获异常时的捕获顺序:如果异常类之间有继承关系,先捕获子类异常再捕获父类异常。
    • finally:
    1. 不管是否发生了异常,都必须要执行。
    2. 通常在finally中关闭已打开的资源,比如:关闭文件流、释放数据库连接等。

    try-catch-finally语句块的执行过程详细分析:
    程序首先执行可能发生异常的try语句块。如果try语句没有出现异常则执行完后跳至finally语句块执行;如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。catch语句块执行完后程序会继续执行finally语句块。finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。

    1. package exception;
    2. import java.io.FileNotFoundException;
    3. import java.io.FileReader;
    4. import java.io.IOException;
    5. public class TestException01 {
    6. public static void main(String[] args){
    7. FileReader reader =null;
    8. try {
    9. reader=new FileReader("d://test.txt");
    10. char c1=(char)reader.read();
    11. char c2=(char)reader.read();
    12. System.out.println(""+c1+c2);
    13. } catch (FileNotFoundException e) { //catch语句 子类先写,后写父类,防止子类异常无法执行到
    14. e.printStackTrace();
    15. } catch (IOException e) {
    16. e.printStackTrace();
    17. }finally {
    18. System.out.println("这里是必须要执行的内容");
    19. try {
    20. if(reader!=null){
    21. reader.close();
    22. }
    23. } catch (IOException e) {
    24. e.printStackTrace();
    25. }
    26. }
    27. }
    28. }

    常用开发环境中,自动增加try-catch代码块的快捷键:

    1. 将需要处理异常的代码选中。
    2. IDEA中,使用:ctrl+alt+t
    3. eclipse中,使用:ctrl+shift+z