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