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自动初始化和关闭资源。

