总结:
-
NullPointerException:尝试使用一个空引用进行操作时抛出。
-
ArrayIndexOutOfBoundsException:数组下标越界时抛出。
-
ClassCastException:类型转换失败时抛出。
-
ArithmeticException:数学运算错误时抛出,如除以零。
-
IllegalArgumentException:传递给方法的参数不合法时抛出。
-
NumberFormatException:字符串转数字失败时抛出。
在Java中,异常(Exception)是程序执行期间出现的错误情况。Java中的异常处理机制允许程序优雅地处理这些错误而不至于崩溃,并且提供了组织和管理异常的方式。Java中的异常主要分为两大类:受检异常(Checked Exceptions)和非受检异常(Unchecked Exceptions)。此外,还有一个特殊的类别叫做错误(Errors),它们通常代表严重的、通常是不可恢复的问题。
执行顺序:
1.如果没有出现异常,则需要try块中所有的语句,不执行catch块中的语句,如果有finally,最后还需要执行finally里面的语句。
2.如果出现异常,则try块中异常发生后,try块还剩下的语句不在执行,将执行catch块中的语句,如果有finally,最后还需要执行finally里面的语句。
基础语法:
try{int num1 = 10 ;int num2 = 0 ;double sum = num1/num2;} catch (ArithmeticException e) {System.out.println("异常信息 = "+e.getMessage());}finally {System.out.println("程序继续运行....");}
运行结果:
特殊情况:如果代码中有两种异常,那么可以使用多个catch块来捕获,但是要遵守子类异常写在前面,父类异常写在后面。
try{Try aTry = new Try();aTry = null;System.out.println(aTry.getClass());int num1 = 10 ;int num2 = 0 ;System.out.println(num1/num2);}catch (ArithmeticException e) {System.out.println("算术异常信息 = "+e.getMessage());} catch (NullPointerException e) {System.out.println("空指针异常信息 = "+e.getMessage());} catch (Exception e) {System.out.println("异常信息 = "+e.getMessage());} finally {System.out.println("程序继续运行....");}}
运行结果:
通过结果可以发现,可以先捕获第一个,然后后续代码将不会执行
如果搭配try和final使用,如果有异常会使程序崩掉。
try{int num1 = 10 ;int num2 = 0 ;System.out.println(num1/num2);}finally {System.out.println("程序继续运行....");}
运行结果:
此时会报错,也就是说异常没有被catch捕获,那么程序执行完就蹦了,简单理解就是有病没有治,所以final相当于亡语。
关于throws异常处理:
当一个方法声明了它可能会抛出某些异常后,任何调用这个方法的地方都需要处理这些异常。处理方式有两种:
-
捕获异常:使用
try-catch
语句块来捕获并处理异常。 -
声明抛出异常:如果你不希望在当前方法中处理异常,可以通过
throws
关键字再次声明该异常,将其传递给上一级调用者。
public void myMethod() throws IOException, SQLException {// 方法体
}
可以扔出给上一级的调用者,throws相当于摆烂,甩锅。一级向一级的传,最终传到jvm机,最终会挂了。