在本周的教程中,我发现当java遇到运行时错误时,所有的线程都会停止,但是在finally代码块中,这个事件看起来有点奇怪。
public class main {
public static void main(String[] args) {
try {
Scanner kb = new Scanner(System.in);
System.out.println("enter number:");
double val = Double.parseDouble(kb.nextLine());
double result = MathUtil.myLog(val);
}
catch (MyException ex) {
System.out.println("Cath:foo");
}
finally {
System.out.println("foo:finally");
}
}
class MathUtil {
public static double myLog(double val)
{
if (val < 0)
throw new MyException();
if(val == 0)
throw new YourException();
return Math.log(val);
}
class MyException extends RuntimeException {
}
class YourException extends RuntimeException {
}
当我执行这段代码并输入一个不正确的条目时,它首先执行finally块,然后我得到runtimeError。
2条答案
按热度按时间m1m5dgzv1#
缩进工作,不管catch子句是否捕捉到错误,finally就像它说的那样几乎每次都执行。只有当JVM内存不足时它才会执行,但这是罕见的情况
fcipmucu2#
这是按设计工作的:-)从甲骨文的文档:'finally块总是在try块退出时执行..'对我来说,这意味着finally块将在catch块或其他任何东西执行之前执行。