Java异常处理面试题及答案(11-15)

11、Java中的RuntimeException和CheckedException有什么区别?
答:RuntimeException和其子类表示程序运行时出现的异常,不需要在代码中进行显式的捕获和处理;而CheckedException和其子类表示在编译时就已经确定可能出现的异常,必须在代码中显式的进行捕获和处理。

12、如何处理Java中的多个异常?
答:可以使用多个catch语句来分别捕获不同类型的异常,也可以使用一个catch语句捕获多个异常。对于不同的异常类型,可以选择不同的处理方式,例如记录日志、抛出新的异常或者直接返回错误信息。

13、什么是异常链(Exception Chaining)?
答:异常链指的是将一个异常包装成另一个异常抛出的过程,通常用于在异常处理中传递更详细的信息。例如,在处理文件读取时发生的IOException时,可以将其包装成一个更高层次的异常,如FileNotFoundException,并将IOException作为其cause(原因)传递下去。

14、什么是finally块?它的作用是什么?
答:finally块是try-catch-finally语句中的一部分,用于处理一些必须执行的操作,如资源的释放、清理等。finally块中的代码无论try和catch块中是否出现异常,都会被执行。它通常用于释放打开的资源,比如文件句柄、数据库连接、网络连接等。

15、如何自定义异常?请给出一个示例。
答:可以通过继承Exception或者RuntimeException来自定义异常。下面是一个自定义异常的示例代码:

public class MyException extends Exception {
    private int code;
    private String message;

    public MyException(int code, String message) {
        super(message);
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    @Override
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

在上面的代码中,我们自定义了一个MyException异常,并添加了code和message属性,分别用于记录异常的错误码和错误信息。