finally语句
本节通过一个例子熟悉带finally子语句的try-catch语句,语法格式如下:
try{}
catch(ExceptionSubClass e){}
finally{}
其执行机制是:在执行try-catch语句后,执行finally子语句,也就是说,无论在try部分是否发生过异常,finally子语句都会被执行。
但需要注意以下两种特殊情况:
1.如果在try-catch语句中执行了return语句,那么finally子语句仍然会被执行。
2.try-catch语句中执行了程序退出代码,即执行Systen.exit(0);,则不执行finally子语句(当然包括其后的所有语句)。
下面的例子中模拟向货船上装载集装箱,如果货船超重,那么货船认为这是一个异常,将拒绝装载集装箱,但无论是否发生异常,货船都需要正点起航。
class DangerException extends Exception{
final String message="超重";
public String warnmess() {
return message;
}
}
class CargoBoat{
int realContent;
int maxContent;
public void setMaxContent(int c) {
maxContent=c;
}
public void loading(int m) throws DangerException{
realContent+=m;
if(realContent>maxContent) {
realContent-=m;
throw new DangerException();
}
System.out.println("目前装载了"+realContent+"吨货物");
}
}
public class Hello {
public static void main(String args[]) {
CargoBoat ship=new CargoBoat();
ship.setMaxContent(1000);
int m=600;
try {
ship.loading(m);
m=400;
ship.loading(m);
m=367;
ship.loading(m);
m=555;
ship.loading(m);
}
catch(DangerException e) {
System.out.println(e.warnmess());
System.out.println("无法再装载重量是"+m+"吨的集装箱");
}
finally {
System.out.println("货船将正点起航");
}
}
}
运行结果:
目前装载了600吨货物目前装载了1000吨货物
超重
无法再装载重量是367吨的集装箱
货船将正点起航