1. Throwable的子类包含哪两类?简述Java Error类与Exception类的区别。
包含 Error 和 Exception;
Error:致命异常,表示系统发生不可控的错误,程序无法处理只能人工介入;
Exception:非致命异常,程序可以处理;
2. Exception又分为checked异常和unchecked异常,请分别举例说明。
unchecked异常:派生于Error或者RuntimeException的异常,无法被编译器检查出,比如NullPointerException;
checked异常: 所有其他的异常;
3. 请查阅资料,简述StackOverflowError和OutOfMemoryError两类错误的发生情形和原因。
StackOverflowError:
区域:虚拟机栈和本地方法栈;
原因:线程调用生成的栈桢深度超过了虚拟机允许的深度(递归深度太大);
OutOfMemoryError:
区域:基本上虚拟机的运行时数据区域(堆,栈,方法区)都会发生;
原因:内存不够,发生了内存溢出;
4. 简述异常处理的两种方式,并举例说明区别。
try-catch:捕获异常进行处理
throw:抛出异常交给上层代码处理
public class Main {
public static void main(String[] args) {
try {
createFile();
} catch (Exception e) {
// TODO: handle exception
}
}
public static void createFile() throws IOException{
File file = new File("d:/a.txt");
if(!file.exists())
file.createNewFile();
}
}
在实际的createFile方法中并没有捕获异常,而是用throws关键字声明抛出异常,即告知这个方法的调用者此方法可能会抛出IOException。那么在main方法中调用createFile方法的时候,采用try…catch块进行了异常捕获处理。
5. 根据某业务场景自定义一个异常类,并在某场景下抛出该异常对象。
class CustomException extends Exception {
public CustomException(String msg){
super(msg);
}
}
public class Main{
public static void main(String[] args){
......
if(PassWord.IsTrue()){
} else {
throw CustomException("密码错误");
}
}
}
6. 异常中的throws声明与throw语句的区别是什么?请举例说明。
throws出现在方法的声明中,表示该方法可能会抛出的异常,然后交给上层调用它的方法程序处理,允许throws后面跟着多个异常类型。
throw一般会用于程序出现某种逻辑时程序员主动抛出某种特定类型的异常。throw只会出现在方法体中,当方法在执行过程中遇到异常情况时,将异常信息封装为异常对象,然后throw出去。throw关键字的一个非常重要的作用就是异常类型的转换。
7. finally子句的作用是什么?
当代码抛出一个异常时,就会终止方法中剩余代码的处理,并退出这个方法的执行。如果方法获得了一些本地资源,并且只有这个方法自己知道,又如果这些资源在退出方法之前必须回收,那么就会产生资源回收问题。
可以将资源回收的代码放入finally子句中。因为不管是否有异常捕获,finally子句中的代码都会执行。
参考:
https://blog.csdn.net/badguy_gao/article/details/78638688
https://blog.csdn.net/qq_18505715/article/details/73196421



