1.    当程序运行时,会遇到各种各样的错误,导致程序退出,这些错误在Java中被统一称为异常。异常格式的组合分为三种,try...catch、try...catch...finally、try...finally。

try {
		System.out.println("除法运算:" + (10/0));
		}catch(ArithmeticException e) {
			e.printStackTrace();
			System.out.println("除法运算异常");
		}

    如上所示,为tyr...catch格式的使用,对try方法中的异常进行捕获,并且通过e.printStackTrace()对异常信息进行的完整输出。如果不引入异常处理,默认情况下,会进行异常信息打印,同时将终止异常产生之后的代码,也就是程序在执行到异常时,同时程序的运行也会中断。

    为了程序在出现异常后,也能继续进行执行,必须引入异常处理语句来完善代码。

2.异常产生后的语句将不再执行。finally方法无论怎样最后都会执行,往往是在finally方法中进行一些资源释放的操作。如下所示为try...catch...finally。

System.out.println("1.算法开始。");
		try {
			System.out.println("2.除法运算:" + (10/0));
			System.out.println("此语句不会输出,因为在此之前发生了异常");
		}catch(ArithmeticException a) {
			a.printStackTrace();
		}finally {
			System.out.println("finally最终语句!!!");
		}
		System.out.println("3.除法计算结束。");

输出结果:

1.算法开始。
java.lang.ArithmeticException: / by zero
finally最终语句!!!	at tryCatchTest.TryCatchTest01.main(TryCatchTest01.java:7)

3.除法计算结束。

3.通过try...catch...finally可以进行多种异常处理。如下所示,进行了数组越界异常、数字格式化异常、算数运算异常的异常判断。根据不同异常进行不同的异常信息输出。

System.out.println("1.开始计算");
		try {
			int x = Integer.parseInt(args[0]);
			int y = Integer.parseInt(args[1]);
			System.out.println("2.除法运算:" + (x/y));
			System.out.println("除法运算:" + (10/0));
			System.out.println("有异常我就不执行");
		}catch(ArrayIndexOutOfBoundsException e) {
			e.printStackTrace();
		}catch(NumberFormatException e) {
			e.printStackTrace();
		}catch(ArithmeticException e) {
			e.printStackTrace();
		}
		finally {
			System.out.println("不管怎样我都执行");
		}
		System.out.println("3.计算结束");

异常使用捕获顺序:范围小的异常要在范围大的异常之前进行处理。

throws:throws关键字主要在方法定义上使用,表示此方法中不进行异常的处理,而是交给被调用处处理。通俗的讲一个方法如果没有进行异常处理,并且在方法上进行了异常抛出,则在调用这个方法时再进行异常处理,或者可以继续异常抛出。

public class ThrowsTest {
	public static void main(String[] args) {
		try {
			System.out.println(MyMath.div(10, 0));
		}catch(Exception e){
			e.printStackTrace();	
		}
	}
}

class MyMath{
	public static int div(int x, int y) throws Exception {
		return x/y;
	}
}

throw:自定义异常处理。

try {
			throw new Exception("自己定义的异常");
		}catch(Exception e) {
			e.printStackTrace();
		}