Tag: try finally

尝试和最后给出没有return语句的exception,但是当在方法中写入return语句时没有exception

请解释为什么Exception出现在第一个程序中而不是出现在第二个程序中。 1)读取方法中没有return语句 class Example { public static void read() { try { int i = 9/0; } finally { System.out.println(“This proogram is giving exception”); } } public static void main(String[] fel) { read(); } } 2)在read方法中使用return语句 class Example { public static void read() { try { int i = 9/0; } finally { System.out.println(“This proogram […]

JVM如何执行Try catch finally块

根据Java语言规范, 第14.20.2节 通过首先执行try块来执行具有finally块的try语句。 然后有一个选择: 如果try块的执行正常完成,则执行finally块,然后有一个选择: 如果finally块正常完成,则try语句正常完成。 如果finally块因为原因S而突然完成,则try语句因为S而突然完成 如果我正确地解释它然后在执行try块finally之后调用,但是这一切是如何工作的以及为什么我得到了输出, public static int TestTryFinallyBlock() { int i =0; try { i= 10; //Perform some more operation return i; } finally { i = 40; } } public static void main( String[] args ) { int i1 = TestTryFinallyBlock(); //Here the output was 10 not 40 } 我想知道这个东西是如何产生输出10的。 […]

finally块中的堆栈溢出error handling

我有一个java程序,运行无限次。 程序代码: void asd() { try { //inside try block System.out.println(“Inside try !!!”); asd(); } finally { //inside finally System.out.println(“Inside finally !!!”); asd(); } } OUTPUT:通过不断打印两个sysout,这个程序无限运行。 我的问题:在某些时候,它开始从try块中抛出StackOverflowErrors,因此它到达finally块,我们再次以递归方式调用此函数。 但是,当我们已经面临StackOverflowError时,finally块中的递归函数如何执行? JVM如何处理这种情况? 如果我们也得到OutOfMemoryErrors会发生同样的行为吗?