一、简介:
java异常处理机制可以让程序具有极好的容错性,让程序更加健壮。当程序运行出现
意外情形时,系统会自动生成一个Exception对象来通知程序,从而实现“业务功能
代码”和“错误处理代码”分离,提供更好的可读性。
二、异常体系:
java把所有非正常情况分成两种:
1、异常(Exception):出现的问题可以被捕获
可以被捕捉的异常也可以分为两类:
1、Check异常:派生自Exception的异常类,必须被捕捉或再次声明抛出。
2、Runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象
2、错误(Error):系统错误,通常有JVM(java虚拟机)处理。例如:系统崩溃、虚
拟机错误、动态链接失败等,这种错误无法恢复或不可能捕捉,
将导致应用程序中断。通常应用程序无法处理这些错误,因此应
用程序不应该试图使用catch块开捕捉Error异常。在定义该方
法时,也无须在其throws句子中声明该方法可能抛出的Error
异常及其任何子类。
附:它们都继承自父类Throwable。
三、java异常处理机制:抛出异常,捕捉异常,处理异常。
try{
//业务功能代码
}catch(异常类1 e1){
//异常处理代码1
}catch(异常类2 e2){
//异常处理代码2
}
......
catch(异常类n e3){
//异常处理代码n
}
例如:
try{
System.out.println(1/0);
}catch(ArithmeticException e){
System.out.println(“算术异常”);
}
//结果:控制台打印算术异常
注意:1、不要过度使用异常。异常开销大,过度使用异常影响程序运行速度。
2、异常捕获时,一定要先捕获小异常,再捕获大异常。否则小异常无法被捕捉到
例如:
try{
System.out.println(1/0);
}catch(Exception e1){
//...
}catch(ArithmeticException e2){
//...
}
//这里会报错:Exception 'java.lang.ArithmeticException' has already been caught
翻译(大概意思):该异常(java.lang.ArithmeticException)已经被捕获了
说明:java.lang.ArithmeticException继承自java.lang.Exception,由于上面使用了java.lang.Exception捕捉异常(可以其自身以及
其子类的异常),该异常已经被java.lang.Exception捕获了,且永远不会被下面的java.lang.ArithmeticException捕获。
3、避免出现庞大的try块
4、避免直接捕捉根异常
5、不要忽略异常