你们好,我是Java最全面试题库
的提裤姐,今天这篇是面试系列的第七篇,主要总结了JavaSE中异常类相关面试题,在后续,会沿着第一篇开篇的知识线路一直总结下去,作到日更!若是我能作到百日百更,但愿你也能够跟着百日百刷,一百天养成一个好习惯。java
Error(错误): 系统中的错误,是在程序编译时出现的错误,只能经过修改程序才能修正。通常是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。面试
Exception(异常): 表示程序能够处理的异常,能够捕获且可能恢复。遇到这类异常,应该尽量处理异常,使程序恢复运行,而不该该随意终止异常。数组
异常的处理方式有两种:函数
具体的处理方式的选择原则:测试
注:异常, 不能捕获了以后什么也不作。或者只是使⽤e.printStacktracspa
若是try中有return语句, 那么finally中的代码仍是会执⾏。 由于return表示的是要整个方法体返回, 因此,finally中的语句会在return以前执⾏。 可是return前执行的finally块内,对数据的修改效果对于引用类型和值类型会所不一样:指针
// 测试 修改值类型
static int f() {
int ret = 0;
try {
return ret; // 返回 0,finally内的修改效果不起做用
} finally {
ret++;
System.out.println("finally执行");
}
}
// 测试 修改引用类型
static int[] f2(){
int[] ret = new int[]{0};
try {
return ret; // 返回 [1],finally内的修改效果起了做用
} finally {
ret[0]++;
System.out.println("finally执行");
}
复制代码
public int getNum() {
try {
int a = 1 / 0;
return 1;
} catch (Exception e) {
return 2;
} finally {
return 3;
}
}
复制代码
返回值为3。 代码在走到第 3 行的时候遇到了一个 MathException,这时第四行的代码就不会执行了,代码直接跳转到 catch语句中,走到第 6 行的时候,异常机制有这么一个原则若是在 catch 中遇到了 return 或者异常等能使该函数终止的话那么有 finally 就必须先执行完 finally 代码块里面的代码而后再返回值。所以代码又跳到第 8 行,惋惜第 8 行是一个return 语句,那么这个时候方法就结束了,所以第 6 行的返回结果就没法被真正返回。若是 finally 仅仅是处理了一个释放资源的操做,那么该道题最终返回的结果就是 2。所以上面返回值是 3。code
throw:orm
throws:cdn