1.异常处理对性能的影响
一般来说,在Java程序中使用try…catch语句不会对应用的性能造成很大的影响。仅仅当异常发生时,Java虚拟机需要执行额外的操作,来定位处理异常的代码块,这是会对性能产生负面影响。如果抛出异常的代码块和捕获异常的代码块位于同一个方法中,这种影响就会小一些;如果Java虚拟机必须搜索方法调用栈来寻找异常处理代码块,对性能的影响就比较大了。尤其当异常处理代码块位于调用栈的底部时,Java虚拟机定位异常处理代码块就需要大量的工作。
2.运用Java异常处理机制
- 在Java语言中,用try…catch语句来捕获异常。
- finally语句:任何情况下都必须执行的代码
- throws子句:声明可能会出现的异常。如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明跑出异常。
- throw语句:抛出异常
例如:汽车在运行时可能会出现故障,汽车本身没办法处理这个故障,因此Car类的run方法声明抛出异常 CarWrongExcepiton:
public void run() throws CarWrongException {
if(车子无法刹车)
throw new CarWrongException("车子无法刹车");
if(发动机无法启动)
throw new CarWrongException("发动机无法启动");
}
异常处理语句的语法规则
- try代码块不能脱离catch代码块或finally代码块而单独存在。try代码块后面至少有一个catch代码块或finally代码块
- try代码块后面可以有零个或多个catch代码块,还可以有零个或至多一个finally代码块。如果catch代码块和finally代码块并存,finally代码块必须在catch代码块后面
- try代码块后面可以只跟finally代码块
try {
int a = 1;
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
a--; //编译错误
} finally {
a ++; //编译错误
}
- 如果一个方法可能出现受检查异常,要么用try…catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误
- throw语句后面不允许紧跟其它语句,因为这些语句永远不会被执行。例: