一、finally{
},finally块中放入一定要执行的代码,通常用来关闭数据库,关闭链接,节约资源,所以finally中的内容一定要被执行,但是有一张情况不被执行,就是catch(Exception
e){System.exit(0);}执行这个语句,系统直接退出了。
二、对异常的总结;
1.异常的概念:程序运行有可能出现问题,然后把问题进行对象的封装。
2.体系:Throwable:异常分为两种:一种是严重的情况,用Error表示,一般不作处理,它的子类都以error作为后缀;另一种是不严重的异常,它用Exception表示,它的子类都以Exception作为后缀,其中有一个比较特殊的子类,就是RuntimelException
运行时异常,抛出此异常,不用在函数体上声明,编译时不做处理;如果声明了,调用者可以处理,也可以不作处理,程序停止运行,需要修改传入的参数;
3、区别两个关键字的使用:throw和throws:
throw:是定义在函数体内,用来抛出对象;而throws定义在函数体上,用来抛出异常类名。
4.异常按照处理过程中分类为两种:
(1)、编译时异常:抛出异常对象时,要声明抛出异常,如果不声明;编译出错,如果声明了,调用者,就要做出相应的处理;要么抛出,要么try,否则出错;
(2)、运行时异常:就是编译时不做处理,然后运行时,程序停止运行。RuntimeException,这时就要修改传递进来的参数。
5、异常处理的几种格式:
try
{
} catch(Exception
e){
}
try
{ }
catch(Exception
e)finally{
}
try { }finally{
}
6.异常在子父类中的体现:如果子类重写了父类中的方法,而父类中的方法抛出异常,那么子类要么抛出父类异常,要么抛出子类异常,总之,要让父类异常能够处理。
7.如果父类方法抛出多个异常,那么子类在重写父类中的方法时,只能抛出父类异常的子类。
8,如果父类或者接口中的方法没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常,如果子类中确实出现了异常,那么就必须处理,绝对不能抛出。
下面通过一个代码来体现一下:
class ExceptionDemo6
{
public static void main(String[] args)
{
Circle c=new Circle(-9);
c.getArea();
}
}
//定义一个异常
class NoValueException extends RuntimeException
{
NoValueException(String message)
{
super(message);
}
}
//定义一个接口,里面有一个方法,获取面积
interface Cir
{
void getArea();
}
//定义一个圆
class Circle implements Cir
{
private double r;
public static final double
PI=3.14;//定义一个全局常量;
Circle(double r) throws RuntimeException
{
this.r=r;
if(r<=0)
throw new
NoValueException("非法值");
}
public void getArea()
{
System.out.println(r*r*PI);
}
}