188、使用 catch( Exception exceptionName ) 的一个关键优势是什么?
-
catch( Exception exceptionName )可以捕获try块中抛出的任何类型的异常,没有抛出的异常能逃脱捕获。 - 程序员可以决定处理该异常或重新抛出它。
189、常规应用程序应该捕获 Error 对象吗?请解释。
不应该。错误通常是底层 Java 系统的严重问题,大多数程序无法从这类问题中恢复,因此不需要捕获 Error 对象。
190、如果没有捕获处理程序与抛出对象的类型匹配,会发生什么?
- 这会导致在嵌套的下一个
try语句中继续搜索匹配项。 - 如果有
finally块,会先执行该块,然后异常再进入嵌套的下一个try语句。 - 如果没有匹配捕获块的嵌套
try语句: - 若异常是受检查异常,则会发生编译错误;
- 若异常是不受检查异常,则会打印堆栈跟踪信息,当前线程提前终止。
191、如果有多个catch块与抛出对象的类型匹配,会发生什么?
try块之后的第一个匹配的catch块将被执行。
192、为什么程序员会在 catch 块中指定超类类型?
- 如果
catch块被编写为捕获超类类型的异常对象,它也可以捕获该类所有子类的对象。 - 这使得
catch能够用简洁的表示法处理相关错误,并允许对相关异常进行多态处理。 - 另外,
catch(Exception exceptionName)这种形式能捕获try块中抛出的任何类型的异常,没有抛出的异常能逃脱捕获,程序员可以决定处理该异常或重新抛出它。
193、使用finally块的关键原因是什么?
::使用finally块的关键原因是确保资源释放代码几乎总能执行,从而避免资源泄漏。程序获取某些类型的资源后,需显式将其返回给系统,若不妥善关闭文件、数据库连接和网络连接等资源,可能导致其他程序无法使用这些资源。而finally块无论对应的try块或catch块是否抛出异常,也无论try块是通过return、break、continue语句退出,还是正常结束,通常都会执行,因此适合放置资源释放代码。
194、当 try 块抛出异常时,该块中的局部引用会怎样?
当 try 块抛出异常并终止时,块中声明的局部变量(包括局部引用)会被销毁。
195、使用继承创建一个异常超类(名为ExceptionA)和异常子类ExceptionB与ExceptionC,其中ExceptionB继承自ExceptionA,ExceptionC继承自ExceptionB。编写一个程序来演示类型为ExceptionA的catch块可以捕获类型为ExceptionB和ExceptionC的异常。
以下是一个满足该需求的 Java 程序示例:
class ExceptionA extends Exception {
public ExceptionA(String message) {
super(message);
}
}
class ExceptionB extends ExceptionA {
public ExceptionB(String message) {
super(message);
}
}
class ExceptionC extends ExceptionB {
public ExceptionC(String message) {
super(message);
}
}
public class Main {
public static void main(String[] args) {
try {
// 抛出 ExceptionB 类型的异常
throw new ExceptionB("This is an ExceptionB");
} catch (ExceptionA e) {
System.out.println("Caught ExceptionA or its subclass: " + e.getMessage());
}
try {
// 抛出 ExceptionC 类型的异常
throw new ExceptionC("This is an ExceptionC");
} catch (ExceptionA e) {
System.out.println("Caught ExceptionA or its subclass: " + e.getMessage());
}
}
}

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



