异常处理中常见的面试题安利
1.概念辨析题
final/finalize/finally的区别:
final;是一个修饰符,修饰类(不能被继承).方法(不能被重写).变量(不能修改值)
finalize:是Object中声明的一个方法,表示有GC调用,在对象被回收之前
finally:是try…catch结构中的一部分,无论异常是否发生,finally中的语句块一定会执行.
2.结果判断题
所含的知识点为当return和finally同时出现时,程序的运行结果.
先直接来看代码;
/** * */
package per.leiyustudy.throwable;
/** * @author 雷雨 * */
public class TestReturnFinally {
/** * @param args */
public static void main(String[] args) {
System.out.println(getNum());
}
public static int getNum() {
int i = 10;
try {
i = 20;
return i;
} catch (Exception e) {
i = 30 ;
return i;
}finally {
i = 40;
return i;
}
}
}
分析这段代码的运行结果.
再来看
/** * */
package per.leiyustudy.throwable;
/** * @author 雷雨 * */
public class TestReturnFinally {
/** * @param args */
public static void main(String[] args) {
System.out.println(getInt());
}
public static int getInt() {
int i = 10;
try {
i = 20;
return i;
} catch (Exception e) {
i = 30 ;
return i;
}finally {
i = 40;
}
}
}
分析这段代码的运行结果:
关于为什么会出现这样的情况,其实并不难理解,在return和finally同时出现时,有两种情况
1.在finally中有return,那么结果就返回finally中的
2.在finally中没有return,那么结果就是try和catch中的
特别注意:在实际开发过程中,一般在finally中是没有return的,因为如果finally中有return语句,那么try和catch中的return就没有作用,一般在开发的过程中,finally中一般只写一些关于资源释放,资源回收的代码.