在Java 中,如果finally块包含return语句,它会覆盖try或catch块中的return语句。这是因为finally块中的代码在try和catch块结束后总是会执行,即使有return语句、异常或System.exit()这样的终止操作。在finally中使用return是不推荐的,因为它会让代码难以维护和调试,容易导致意外的行为。 示例 publicclassExample{publicstati...
A. 如果finally中有return语句,则会将try或catch中的return语句“覆盖”,直接执行finally中的return语句 B. 如果一个方法内部抛出了一个异常对象,那么必须要在方法上声明抛出 C. 如果调用了一个声明抛出异常的方法,那么调用者必须要处理异常 D. 如果try块中出现了异常的代码,那么其后面的代码是不会执行的 ...
原因同前面一样,也就是说情况与try中的return语句执行完全一样。最后总结:finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally里也有return语句则覆盖try或catch中的return语句直接返回。
finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句不能影响try或catch中 return已经确定的返回值(如果catch语句中返回的是一个引用,那么在finally语句中对引用的内容进行修改是会影响catch中return的返回值的),若finally里也有return语句则覆盖try或catch中的return语句直接返回。
1 finally语句在return语句执行之后return返回之前执行的 2 finally块中的return语句会覆盖try块中的return返回 3 如果finally语句中没有return语句覆盖返回值,那么原来的返回值可能因为finally里的修改而改变也可能不变 4 try块里的return语句在异常的情况下不会被执行,这样具体返回哪个看情况 ...
通过实际执行,我们看到,finally 中的 return “覆盖”了 try 中的 return。在一个函数中执行了两次 return,这已经超出了很多人的常识,也是其它语言中不会出现的一种行为。 面对如此怪异的行为,我们当然可以把它作为一个孤立的知识去记忆,但是实际上,这背后有一套机制在运作。
finally块中的return语句会覆盖try块的return返回 package exception; public class Demo07 { public static void main(String[] args) { System.out.println(func()); } public static int func(){ int a = 10; try{ System.out.println("try中的代码块"); ...
finally块中的return语句会覆盖try块中的return返回。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 publicclassFinallyTest2{publicstaticvoidmain(String[]args){System.out.println(test2());}publicstaticinttest2(){int b=20;try{System.out.println("try block");returnb+=80;}catch(Exception e){Sy...
public int testMethod() { try { return 1; } finally { return 2; // 不建议这样做,最终返回的值是2 } } 上面这个例子,finally中的return 2;会覆盖try中的返回值,导致方法返回的是2,而不是1。 总结 无论是否有异常,finally块都会执行。 如果try或catch中有return,finally仍然会执行。 finally是在ret...
1、不管try块、catch块中是否有return语句,finally块都会执行。 2、finally块中的return语句会覆盖前面的return语句(try块、catch块中的return语句),所以如果finally块中有return语句,Eclipse编译器会报警告“finally block does not complete normally”。 3、如果finally块中包含了return语句,即使前面的catch块重新抛出了...