------- android培训、java培训、期待与您交流! ----------
1 基本概念简介
异常,就是程序在运行过程中出现不正常情况,而异常就是java对这些不正常的情况进行描述的对象的体现。
异常有两种:
a 编译时检测异常:该类异常在编译时如果没有处理,编译失败。该异常被标识,表示可以被处理。
b 运行时异常:该类异常在编译时不需要处理,编译器不检查该类异常。如果出现该类异常,建议不作处理,直接停止程序,然后修正相关代码。
小注:return 和 throw是程序结束的标志。
异常的由来:问题也是现实生活中的事物,也可以通过java的形式进行描述并封装成对象。
问题的划分:严重的问题,java用error来进行描述;而对于那些非严重的问题,java就通过异常来进行描述。
问题的处理方法:error:一般不编写针对性的代码进行处理;而异常可以使用针对性的处理方式进行处理。
Error 和Exception的共性内容:不正常情况引发的原因等;
2 异常体系
throwable
|—Error
|—Exception
|—RuntimeException
...
异常体系的特点:异常体系中的所有类以及建立的对象都具备可抛性,也就是说可以被throw和throws关键字所操作,而且只有异常体系具备该特点。
throw和throws的用法:throw定义在函数内,用于抛出异常对象;throws定义在函数上,用于抛出异常类,并且可以抛出多个,中间用逗号隔开
异常的优点:将问题进行封装;将正常的流程代码和问题处理代码相分离,便于阅读。
3 异常的使用
使用异常时,应注意如下几点:
a 声明异常时,建议声明更为具体的异常,这样处理也可以更具体;
b 声明了几个异常就要有对应个数的catch(){ }语句进行处理,但不要定义多余的catch代码块,否则容易导致多个catch的异常出现继承关系,则该函数就结束了;
c 函数中有异常发生,
d 在进行catch处理时,catch中一定要定义具体的处理方式,可以使用异常日志文件记录相关的异常信息,便于以后的维护
小注:在子父类覆盖时:子类抛出的异常必须是父类的异常的子类或者子集;如果父类或者接口没有异常抛出时,子类覆盖出现异常,只能try不能抛。
异常处理语句:
try {需要被检测的测试代码 }catch(异常类型 变量名){ 处理异常的代码 } finally{ 一定会执行的语句 }
try {} catch(){}
try{} catch(){} catch(){} catch(){} catch()){}...
try{} finally{}
小注:finally中定义的通常是:关闭资源代码,如进行数据库操作时,完成相关的功能后就需要释放相关的资源;只有执行到System.exit(0);时,系统退出,JVM结束,此时finally中的语句不会执行。
示例:
class ExcpMethod
{
int div(int a,int b)throws Exception//通过throws的关键字声明了该功能有可能会出现问题。
{
return a/b;
}
}
class ExcepTest
{
public static void main(String[] args) //throws Exception
{
ExcpMethod exm= new ExcpMethod();//建立实例对象
try//执行代码块
{
int x = exm.div(4,0);
System.out.println("x="+x);
}
catch (Exception e)//异常处理
{
System.out.println(e.toString());
}
System.out.println("It is over");
}
}
自定义异常:定义类继承Exception 或 RuntimeException
目的:为了让自定义类具有可抛性;让该类具备操作异常的共性方法
如:
class MyException extends Exception
{
MyException(String message)
{
super(message);//调用父类的方法
}