捕获和处理异常

原文: https://docs.oracle.com/javase/tutorial/essential/exceptions/handling.html

本节描述如何使用三个异常处理器组件 - trycatchfinally块 - 来编写异常处理器。然后,解释了 Java SE 7 中引入的try- with-resources 语句。 try- with-resources 语句特别适合使用Closeable资源的情况,例如流。

本节的最后一部分将介绍一个示例,并分析各种场景中发生的情况。

以下示例定义并实现名为ListOfNumbers的类。构造时,ListOfNumbers创建一个包含 10 个Integer元素的ArrayList,其顺序值为 0 到 9. ListOfNumbers类还定义了一个名为writeList的方法,该方法将数字列表写入一个名为的文本文件中OutFile.txt。此示例使用java.io中定义的输出类, Basic I / O 中介绍了这些输出类。

  1. // Note: This class will not compile yet.
  2. import java.io.*;
  3. import java.util.List;
  4. import java.util.ArrayList;
  5. public class ListOfNumbers {
  6. private List<Integer> list;
  7. private static final int SIZE = 10;
  8. public ListOfNumbers () {
  9. list = new ArrayList<Integer>(SIZE);
  10. for (int i = 0; i < SIZE; i++) {
  11. list.add(new Integer(i));
  12. }
  13. }
  14. public void writeList() {
  15. // The FileWriter constructor throws IOException, which must be caught.
  16. PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));
  17. for (int i = 0; i < SIZE; i++) {
  18. // The get(int) method throws IndexOutOfBoundsException, which must be caught.
  19. out.println("Value at: " + i + " = " + list.get(i));
  20. }
  21. out.close();
  22. }
  23. }

粗体的第一行是对构造器的调用。构造器初始化文件上的输出流。如果无法打开文件,构造器将抛出IOException。第二个粗体行是对ArrayList类的get方法的调用,如果其参数的值太小(小于 0)或太大(大于当前包含的元素数),则抛出IndexOutOfBoundsExceptionArrayList)。

如果您尝试编译 ListOfNumbers类,编译器将打印有关FileWriter构造器抛出的异常的错误消息。但是,它不会显示有关get引发的异常的错误消息。原因是构造器IOException抛出的异常是一个经过检查的异常,而get方法IndexOutOfBoundsException抛出的异常是一个未经检查的异常。

现在您已熟悉ListOfNumbers类以及可以在其中抛出异常的位置,您已准备好编写异常处理器来捕获和处理这些异常。