【问题标题】:how to get the statement in finally block printed after the return statement from try and catch block?如何在 try 和 catch 块的 return 语句之后打印 finally 块中的语句?
【发布时间】: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


【解决方案1】:

如果您总是希望在打印方法调用的结果后显示消息,请在方法调用后打印:

System.out.println(obj.divideTwoNumbers(sc.nextInt(),sc.nextInt()));
System.out.println("Thanks for using the application");

并删除finally

【讨论】:

  • No man,根据问题我必须强制使用 finally 块,这就是我的问题!!!
  • “根据问题”你没有说使用finally有特殊要求。您刚刚说您希望 finally 中的语句在另一个语句之后执行。
【解决方案2】:

Final 总是在返回 ans 值之前执行。

import java.io.*;
import java.util.*;
public class Division {
    public String divideTwoNumbers(int number1, int number2) {
        try {
            int n = number1 / number2;
            String ans = "The answer is " + n + ".";
            return ans;

        } catch (ArithmeticException e) {
            String s1 = "Division by zero is not possible. ";
            return s1;
        }

    }

    public static void main(String[] args) {
        try {
            Division obj = new Division();
            Scanner sc = new Scanner(System.in);
            System.out.println("Enter the numbers");
            System.out.println(obj.divideTwoNumbers(sc.nextInt(), sc.nextInt()));
        }

        finally {
            System.out.print("Thanks for using the application");
        }
    }
}

输出: 输入数字 15 3 答案是 5。 感谢您使用该应用程序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2019-04-07
    • 2018-03-21
    • 2018-11-20
    • 1970-01-01
    相关资源
    最近更新 更多