java finally

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吨的集装箱
    货船将正点起航

猜你喜欢

转载自blog.csdn.net/qq_40956679/article/details/80896900