再论异常,finally语句

finally语句:

1:finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一的管理。
2:无论try所指定的程序块中是否抛出例外,finally所指定的代码都要被执行。
3:通常在finally语句中可以进行资源的清除工作,如:
关闭打开的文件,删除临时文件……

几点注意:

1:与 try-catch语句的区别:finally段的代码无论是否发生异常都有执行。
2:finally语句所做的工作类似是收尾工作,即给出异常发生后的一个处理办法。

标观察下边代码的结构(内容不重要)

FileInputStream	in	=	null;

try{
	in = new FIleInputStream ("myfile.txt");		//可能抛出FIleInputStream。
	int b;
	b = in.read();		//可能抛出IOException
	while (b!=-1) {
		System.out.print((char) b);
		b = in.read;
	}
}catch(FileNotFoundException	e) {		//处理FIleInputStream
	e.printStackTrace();
	
}catch(IOException	e) {		//处理IOException
	System.out.println(e.getMessage());

}finally{
 try{		还可能出错,再加一个try。
 	in.close();		//处理,关闭in。
   }catch (IOException  e) {
   	e.printStackTrace();
   }	
}

异常的抛出:

java的例外处理机制使得例外事件,沿着被调用的顺序往前寻找,只要找到符合该例外种类的例外处理程序。(即:不断向前寻找,知道可以抛出,最高抛出给运行时系统)。

throw和throws

1:throws:通常被应用于在声明方法时,用来指定方法可能抛出的异常,多个异常可以使用逗号隔开。
2:throw(声明方法抛出的异常):throw通常用于方法体当中,并且会抛出一个异常对象,程序执行到throw语句时立刻终止。

public	class	Captor {
	static	int	quotient(int x,int y) throws	MyException{
		if( y<0){
			throw	new	MyException("除数不能是负数");
		}
		return	x/y;
	}
	public	static	void	main(String	args[]){
		try {
			int	result = quotient (3 , -1);
		}catch(MyException	e){
			System.out.println(e.getMessage());
		}catch(ArithmeticException	e){
			System.out.println("除数不能为零");
		}catch(Exception	e){
			System.out.println("程序发生了其他异常");
		}
	}
}

输出结果:除数不能是负数。

关于使用自定义的异常:

1:通过继承java.lang.Exception类声明自己的异常类。
2:在方法适当的位置生成自定义异常的实例,并用throw语句抛出。
3:在方法的声明部分用throws语句声明该方法可能抛出的异常。

异常与继承之间的关系:

重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常。(即重写方法,只能是不抛异常或抛出同类型的异常)

总结:

1:一个图:异常与错误的分类
2:五个关键字:try,catch,finally,throw,throws。
3:先抓小异常,再抓大异常。
4:异常与重写之间的关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值