在Java中 try catch是否可以不要catch块

时间:2020-02-23 14:33:58  来源:igfitidea点击:

是的,我们可以使用finally块来实现没有catch块的try语句。

即,可以使用 try finally。
如我们所知,即使在System.exit()的情况下,仍然在try块中具有异常或者返回语句,始终执行。

让我们通过示例来理解

package org.arpit.theitroad;
 
public class TryWithoutCatchMain {
 
 public static void main(String args[])
 {
  try
  {
   System.out.println("Executing try block"); 
  }
  finally
  {
   System.out.println("Executing finally block"); 
  }
 }
}

执行上面的程序时,我们将获取以下输出:

Executing try block
Executing finally block

在try块中有返回语句时会发生什么:

如果在try块中有返回语句,则finally块仍然执行。

package org.arpit.theitroad;
 
public class TryWithoutCatchMain {
 
 public static void main(String args[])
 {
  System.out.println(print());
 }
 
 public static String print()
 {
  try
  {
   System.out.println("Executing try block"); 
   return "Return from try block";
  }
  finally
  {
   System.out.println("Executing finally block"); 
  }
 }
}

执行上面的程序时,我们将获取以下输出:

Executing try block
Executing finally block
Return from try block

如果我们在finally块中有返回声明,则会发生什么:

它将覆盖了try块返回的任何内容。
让我们通过示例来理解:

package org.arpit.theitroad;
 
public class TryWithoutCatchMain {
 
 public static void main(String args[])
 {
  System.out.println(print());
 }
 
 public static String print()
 {
  try
  {
   System.out.println("Executing try block"); 
   return "Return from try block";
  }
  finally
  {
   System.out.println("Executing finally block"); 
   return "Return from finally block";
  }
 }
}

执行上面的程序时,我们将获取以下输出:

Executing try block
Executing finally block
Return from finally block

如果在try块中抛出异常,那么什么情况:

如果在try块中抛出异常,则finally块仍然执行。

package org.arpit.theitroad;
 
public class TryWithoutCatchMain {
 
 public static void main(String args[])
 {
  System.out.println(print());
 }
 
 public static int  print()
 {
  try
  {
   throw new NullPointerException();
   
  }
  finally
  {
   System.out.println("Executing finally block"); 
   
  }
 }
}

执行上面的程序时,我们将获取以下输出:

Executing finally block
Exception in thread "main" java.lang.NullPointerException
 at org.arpit.theitroad.TryWithoutCatchMain.print(TryWithoutCatchMain.java:14)
 at org.arpit.theitroad.TryWithoutCatchMain.main(TryWithoutCatchMain.java:7)