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属性,分别用于记录异常的错误码和错误信息。