有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家
finally 块中的代码什么时候被执行?
(1)如果try{}语句块中有return语句,而finally{}语句块中没有return语句时,finally{}块中的代码在return语句前执行。
因为:由于程序执行return语句就意味着结束对当前函数的调用并跳出这个函数体,因此任何语句要执行都只能在return前执行,因此finally块里代码也是在return前执行的。
(2)如果在try{}语句块和finally语句块都有return语句时,finally语句块中的return语句将会覆盖函数中其他return语句。
以下方法返回什么?
private static String extracted1() {try {int i = 10 / 0;return "ok";} catch (Exception e) {System.out.println("exception");return "exception";} finally {System.out.println("finally");return "finally";}
}
以下方法返回什么?
private static String extracted2() {try {return "ok";} catch (Exception e) {System.out.println("exception");return "exception";} finally {System.out.println("finally");return "finally";}
}
try-catch-finally 中那个部分可以省略?
try后面至少得有其一
Error 和 Exception 的区别?
运行时异常与受检异常有何异同?
throw 和 throws 的区别?
throw:当前方法向外抛异常
throws:声明当前方法可能会抛出一个或者多个异常
常见的异常类有哪些?
NullPointerException
ClassCastException
数组下标越界异常:ArrayIndexOutOfBoundsException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException
java.lang.OutOfMemoryError
java.lang.StackOverflowError
主线程可以捕获到子线程的异常吗?
正常情况下,如果不做特殊的处理,在主线程中是不能够捕获到子线程中的异常的。
public static void main(String[] args) {try {new Thread(() -> {int i = 10 / 0;}).start();} catch (Exception e) {// 不会执行System.out.println("子线程发生了异常");}
}