Java中深入理解try..catch语句的使用

本文详细解析了try...catch语句的使用方法,包括catch块中异常类型的指定、多catch块的使用及顺序要求,以及如何通过多态处理异常。通过实例展示了如何针对不同异常类型进行精确处理,强调了异常处理对于程序调试的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深入理解try…catch语句:

1、catch后面括号中的类型可以是具体的异常类型,也可以是该异常类型的父类型。

2、catch语句可以写多个。建议写catch的时候一个异常一个catch处理,这样有利于程序的调试。

3、catch写多个时,如果多个异常存在继承关系,顺序必须从子到父依次写。如果没有继承关系,catch的顺序没有要求。

测试代码:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Test07 {
    public static void main(String[] args) {
        
        try {
            new FileInputStream("H:\\test061.txt");
        } catch (FileNotFoundException fnfe) {  // 写同类型的,肯定没问题
            System.out.println("文件未找到异常!");
            fnfe.printStackTrace();
        }

        try {
            new FileInputStream("H:\\test061.txt");
        } catch (IOException ioe) {  // 相当于多态:IOException ioe = new FileNotFoundException("文件未找到");
            System.out.println("文件未找到异常!");
            ioe.printStackTrace();
        }

        try {
            new FileInputStream("H:\\test061.txt");
        } catch (Exception e) {  // 多态:Exception e = new FileNotFoundException("文件未找到");
            System.out.println("文件未找到异常!");
            e.printStackTrace();
        }

        // 如果try里面代码可能出现多种异常的一种,只能出现一种,因为出现异常,后面代码不会执行,而是进入catch语句
        try {
            FileInputStream fis = new FileInputStream("H:\\test061.txt");  // 抛出FileNotFoundException异常
            fis.read();  // 抛出IOException异常
        } catch (Exception e) {  // 如果这样写,try里面的任意一个异常被捕捉后,都进入这个catch语句进行处理,显然不合适,应该多种异常换不同的捕捉方式
            System.out.println("可能发生文件未找到异常!,也可能发生文件读写异常!");  // 这样处理太含糊,具体难于定位
            e.printStackTrace();
        }

        try {
            FileInputStream fis = new FileInputStream("H:\\test061.txt");  // 抛出FileNotFoundException异常
            fis.read();  // 抛出IOException异常
        } catch (FileNotFoundException fnfe) {  // 捕捉FileNotFoundException异常
            System.out.println("文件未找到异常!");
            fnfe.printStackTrace();
        } catch (IOException ioe) {  // 捕捉IOException异常
            System.out.println("文件读写异常!");
        }

        // 如果写多个catch语句,catch语句的顺序不能随意,必须按从子到父的顺序写
        // 如果捕捉的异常对象没有继承关系,那没有顺序要求
        /*try {

        } catch (IOException ioe) {
            System.out.println("文件读写异常!");
        } catch (FileNotFoundException fnfe) {  // 保错:FileNotFoundException 已经被捕捉
            System.out.println("文件未找到异常!");
        }*/

        try {
            FileInputStream fs = new FileInputStream("H:\\test061.txt");
            int a = 10 / 0;
        } catch (FileNotFoundException fnfe) {  // FileNotFoundException异常属于编译时异常
            System.out.println("文件未找到异常!");
        } catch (ArithmeticException ae) {  // ArithmeticException异常属于运行时异常
            System.out.println("算术异常!");
        }
        // 无继承关系的两种异常,捕捉时catch语句顺序可以任意
        try {
            FileInputStream fs = new FileInputStream("H:\\test061.txt");
            int a = 10 / 0;
        } catch (ArithmeticException ae) {
            System.out.println("算术异常!");
        } catch (FileNotFoundException fnfe) {
            System.out.println("文件未找到异常!");
        }

        // jdk8新特性允许catch语句中这样写:
        try {
            FileInputStream fs = new FileInputStream("H:\\test061.txt");
            int a = 10 / 0;
        } catch (FileNotFoundException | NullPointerException | ArithmeticException e) {
            // 这样写允许多种不同型的异常,进入该分支catch语句中,我这里三种异常是随便写的,这就要求我们掌握异常的分类关系
            System.out.println("可能是文件不存在异常,可能是空指针异常,可能是算术异常!");
        }

        System.out.println("异常捕捉后面代码能执行,来个hello world!意思一下");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值