我在搞弄一些try...catch...finally
执行,发现finally
中的断点似乎不会被击中:
try {
System.out.println("in try");
int num = 5 / 0;
} catch (ArithmeticException e) {
System.out.println("in catch");
} finally {
System.out.println(); //breakpoint here
System.out.println("in finally");
}
finally
中的断点似乎没有命中,但是可以成功打印出来。
但是,如果我将try
更改为int num = 5 / 1;
,因此没有进入catch
,则断点被击中。。
我正在使用Netbeans 8.1。
这有原因吗?
答案 0 :(得分:0)
之所以发生是因为,如果您看到代码,则在catch中无限循环地抛出函数
exampleMethod()调用exampleMethod2(),而exampleMethod2()调用exampleMethod(),因此您的函数循环,这就是为什么您得到StackoverFlowError的原因
尝试函数不自我调用
public static void main(String [] args){
SpringApplication.run(AuthApplication.class,args);
尝试{
System.out.println(“尝试中”);
int num = 5/0;
} catch(ArithmeticException e){
System.out.println(“ in catch”);
exampleMethod();
}最后{
System.out.println(); // <---此处的断点
System.out.println(“ in finally”);
}
}
静态void exampleMethod(){
}
在此示例中,刹车点最终被击中
答案 1 :(得分:0)
根据this answer最终被跳过,因为无限递归(同样,这个问题可能是重复的)
否则,我认为您应该重新编译整个项目。因此,即使删除该函数调用,也许编译后的类仍具有无限递归。
编辑
这是它起作用的证明。因此,请尝试重新编译它,删除缓存等,或者请给我们更多有关确切问题的描述。