192. Java 异常 - Java 异常处理之 Try 块详解

120 阅读2分钟

192. Java 异常 - Java 异常处理之 Try 块详解


✅ 什么是 try 块?

Java 中,如果你想处理可能抛出异常的代码,第一步就是要把它包裹在一个 try 块中:

try {
    // 可能抛出异常的代码
}
catch (异常类型 e) {
    // 处理异常
}
finally {
    // 无论是否异常,都会执行的代码
}

📌 其中,try 用于“尝试”执行代码,如果过程中发生异常,系统会转到 catch 来处理。


✍️ 示例:writeList() 方法的异常处理

我们继续使用之前的 ListOfNumbers 类。我们要处理两个可能出错的地方:

  • 创建文件输出流:new FileWriter(...) → 可能抛出 IOException(受检异常)
  • 获取列表元素:list.get(i) → 可能抛出 IndexOutOfBoundsException(未受检异常)

🔧 方式一:整体 try 包裹整个方法逻辑

这是最常见、最清晰的方式,适合代码不长的情况:

public void writeList() {
    PrintWriter out = null;
    try {
        System.out.println("进入 try 块");
        out = new PrintWriter(new FileWriter("OutFile.txt"));

        for (int i = 0; i < SIZE; i++) {
            out.println("Value at: " + i + " = " + list.get(i));
        }
    }
    // 后面会补充 catch 和 finally 块
}
  • ✅ 把整个逻辑放在一个 try 块中,清晰明了
  • ✅ 稍后我们可以用多个 catch来分别捕获不同类型的异常
  • ⚠️ 这里如果没有 catchthrows,编译器会直接报错,因为 IOException 是受检异常!

🔍 可选设计:每段代码单独 try 块?

当然也可以,比如你希望分别处理不同语句的异常:

try {
    out = new PrintWriter(new FileWriter("OutFile.txt"));
} catch (IOException e) {
    System.err.println("文件创建失败:" + e.getMessage());
}

try {
    for (int i = 0; i < SIZE; i++) {
        out.println("Value at: " + i + " = " + list.get(i));
    }
} catch (IndexOutOfBoundsException e) {
    System.err.println("访问列表越界:" + e.getMessage());
}

💡 但这种写法可读性较低,且资源关闭逻辑更容易遗漏,因此更推荐“整体 try 包裹”的做法。


🧠 培训小总结:

关键点说明
try 作用捕获可能抛出异常的代码,保护程序稳定运行
放哪里?放在可能出错的代码段外围
一段还是多段?一段整体包裹逻辑清晰,适合绝大多数情况
如果出错?会自动跳转到对应的 catch 块中去处理

  • try 块就像安全气囊,只有在程序‘撞墙’时才会打开。”
  • “程序执行进入 try,就像走上玻璃桥;万一踩断,就靠 catch 来兜底。”
  • “没写 try,遇到 IOException 编译器直接说不干——它比你还着急。”