【发布时间】:2020-06-17 21:51:54
【问题描述】:
我希望finally块中的语句在try and catch block的return语句之后打印,但finally块中的语句总是在此之前打印。
1 import java.io.*;
2 import java.util.*;
3 public class Division
4 {
5 public String divideTwoNumbers(int number1,int number2)
6 {
7 try
8 {
9 int n=number1/number2;
10 String ans="The answer is "+n+".";
11 return ans;
12
13 }
14 catch(ArithmeticException e)
15 {
16 String s1="Division by zero is not possible. ";
17 return s1;
18 }
19 finally
20 {
21 System.out.print("Thanks for using the application");
22 }
23 }
24 public static void main(String[] args)
25 {
26 Division obj=new Division();
27 Scanner sc=new Scanner(System.in);
28 System.out.println("Enter the numbers");
29 System.out.println(obj.divideTwoNumbers(sc.nextInt(),sc.nextInt()));
30 }
31 }
输入:
`15` and `0`
需要输出:
`Division by zero is not possible. Thanks for using the application.`
我得到的输出:
Thanks for using the application. Division by zero is not possible.
【问题讨论】:
-
在第 30 行调用
divideTwoNumbers之后只需调用该打印语句? -
顺便说一句。你应该只在特殊情况下使用异常,输入 0 的人不是一个。你应该用简单的 if else 自己处理。
-
finally不能在return之后执行,因为return终止了方法(然后另一个println被执行)。恕我直言,感谢您使用该应用程序的正确位置,应该是main的结尾(应用程序的真正结尾) - 否则如果该方法被调用两次或更多次会发生什么? -
@user85421 那么在 try 和 finally 都有 return 语句的情况下会发生什么?
-
@Trishul 这与我写的内容有什么关系?并且文档准确地说明了发生的情况 - “如果 catch 块由于原因
R突然完成,则执行 finally 块。...如果 finally 块由于原因S突然完成,那么 try 语句由于原因突然完成S(以及原因R被丢弃)。” (不难自己测试)(我也相信这个问题已经在 StackOverflow 上被问过/回答了)
标签: java exception try-catch-finally