一尘不染

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

java

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

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();
    }
}

阅读 184

收藏
2020-12-03

共1个答案

一尘不染

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

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

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

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

2020-12-03