当前位置: 首页 > 面试题库 >

尝试并最终给出不带return语句的异常,但是在方法中编写return语句时也没有异常

冀永寿
2023-03-14
问题内容

请解释为什么异常出现在第一个程序中而不是第二个程序中。

1)在read方法中没有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)在读取方法中使用return语句

class Example
{   
    public static void read()
    {
         try
         {
               int i = 9/0;
         }
        finally
        {
               System.out.println("This proogram is not giving exception");
               return;
        }       
    }

    public static void main(String[] fel)
    {
          read();
    }
}

问题答案:

最终不应该在内部使用分支语句(return,goto),因为这样的语句的执行会使在最终之前执行的其他指令无效。

在Java语言规范说:如果try块的执行任何其他原因[R突然结束,那么finally块被执行,然后有一个选择:

  1. 如果finally块正常完成,则try语句由于原因R突然完成。
  2. 如果finally块由于原因S突然完成,则try语句由于原因S突然完成(并且原因R被丢弃)。

–在finally块内的return语句将导致在try或catch块中引发的任何异常都将被丢弃。



 类似资料:
  • 我不断地得到缺少的return语句并且在解析时到达文件的结尾,然而我已经有了return语句并且我的代码正确地关闭了括号。请帮忙,谢谢

  • 问题1: 为什么下面的代码在没有return语句的情况下进行编译? 注意:如果在while之后添加return,则会得到。 问题2: 另一方面,为什么下面的代码会编译, 即使下面的不是。

  • 我有一个函数在某些情况下返回null,比如: 我想做另一个函数,它做完全相同的事情,除了它抛出一个错误,而不是返回null如果满足这个条件。我试着这么做: 不幸的是,Java不喜欢这样做,并在“throw”令牌上给我一个语法错误(并告诉我它不能从IllegalArgumentException转换为Double)。我能想到的唯一其他方法是这样的: 这当然是完全好的,我只是想知道是否有一种方法可以在

  • 我在试着测试我正在学习的一门课。我想运行一个打印报表,以员工的月薪乘以12,给我年薪,然后加10%。除了最后一部分,我已经把所有的工作都做好了 线程“main”Java.util.unknownformatconversionexception:Conversion='r'在Java.util.formatter$formatspecier.Conversion(formatter.Java:26

  • return 关键字并不是专门用于结束循环的,return 语句用于终止函数的执行或退出类的方法,并把控制权返回该方法的调用者。如果这个方法带有返回类型,return 语句就必须返回这个类型的值;如果这个方法没有返回值,可以使用没有表达式的 return 语句。 return 语句的一般语法格式如下: 如果一个方法使用了 return 语句并且后面跟有该方法返回类型的值,那么调用此方法后,所得到的

  • 1. return语句 之前我们一直在main函数中使用return语句,现在是时候全面深入地学习一下了。在有返回值的函数中,return语句的作用是提供整个函数的返回值,并结束当前函数返回到调用它的地方。在没有返回值的函数中也可以使用return语句,例如当检查到一个错误时提前结束当前函数的执行并返回: #include <math.h> void print_logarithm(double