Java try-catch示例
时间:2020-02-23 14:36:59 来源:igfitidea点击:
Java try-catch块用于处理程序中的异常。
执行try块中的代码,如果发生任何异常,则使用catch块对其进行处理。
如果catch块无法处理该异常,则将其返回给调用程序。
如果程序无法处理异常,则将其返回到JVM,JVM终止该程序并将异常堆栈跟踪打印到输出流。
尝试块之后必须是catch或者finally块。
Java try-catch示例
让我们看一个简单的代码,从中可以得到一个例外。
package com.theitroad.examples; public class JavaTryCatch { public static void main(String[] args) { System.out.println(divide(20,5)); System.out.println(divide(20,0)); } public static double divide(int x, int y) { return x/y; } }
输出:
4.0 Exception in thread "main" java.lang.ArithmeticException:/by zero at com.theitroad.examples.JavaTryCatch.divide(JavaTryCatch.java:11) at com.theitroad.examples.JavaTryCatch.main(JavaTryCatch.java:7)
现在,让我们看看如何使用try-catch块来处理divide()方法引发的异常。
package com.theitroad.examples; public class JavaTryCatch { public static void main(String[] args) { try { System.out.println(divide(20, 5)); System.out.println(divide(20, 0)); } catch (ArithmeticException ae) { System.out.println(ae.getMessage()); } } public static double divide(int x, int y) { return x/y; } }
输出:
4.0 /by zero
Java try-catch多个异常
我们可以在一系列catch块中捕获多个异常。
让我们看一个使用多个捕获块的简单示例。
package com.theitroad.examples; public class JavaTryCatch { public static void main(String[] args) { try { foo(10); } catch (IllegalArgumentException ie) { System.out.println(ie.getMessage()); } catch (NullPointerException ne) { System.out.println(ne.getMessage()); } } public static void foo(int x) throws IllegalArgumentException, NullPointerException { //some code } }
捕获例外命令
Java异常具有层次结构。
Throwable是所有异常和错误的超类。
捕获多个异常时,应首先捕获最具体的异常。
否则,将引发编译时错误,并显示消息" Unreachable catch block。
它已由catch块处理为"例外"。
下面的代码将给出编译时错误,因为NullPointerException应该在Exception之前捕获。
try { foo(10); } catch (Exception ie) { System.out.println(ie.getMessage()); } catch (NullPointerException ne) { System.out.println(ne.getMessage()); }
在单个catch块中捕获多个异常
如果您注意到上面的代码,我们将在所有catch块中打印异常消息。
Java支持在单个catch块中捕获多个异常。
Java 7中引入了此功能。
try { foo(10); } catch (IllegalArgumentException | NullPointerException e) { System.out.println(e.getMessage()); }
Java try-catch-finally示例
即使程序引发异常并终止,finally块也始终执行。
通常使用finally块来确保在程序终止之前关闭资源。
这是try-catch-finally块的真实示例。
我们正在尝试打开文件并对其进行处理。
我们正在使用finally块来确保FileInputStream已关闭。
package com.theitroad.examples; import java.io.FileInputStream; import java.io.IOException; public class JavaTryCatch { public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream("data.txt"); //code to process the file fis.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (fis != null) try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } }
不推荐使用Java finally块,因为它不可靠。
推荐的方法是使用try-with-resources自动初始化和关闭资源。