------- android培训、java培训、期待与您交流! ----------
异常就是在程序中出现了不正常的问题,导致程序无法正常的运作。在Java中利用面向对象的思想将这一类问题的描述封装成一个类——Exception类,在此类中封装了一些属性和方法,能够很方便的呈现对异常问题的名称、异常问题的描述及异常发生的原因等信息,帮助开发者有效率的操作和处理相关问题。
该对象的一个重要特征就是具有可抛性。通过向上抽取可以找到其父类——Throwable类,凡是继承自该类的对象都具有可抛性,其下面有两个子类(Error和Exception),因此,在该体系中的类和对象都具有可抛性,具体体现是可以通过throw和throws来操作相关的异常对象。
一、首先,在程序中可能出现异常的方法中,对可能出现的异常的处理方式有两种:throw和try方式。其中,throw方式就是说在可能遇到异常的地方抛出对应的异常对象,自己本身不做处理,而是抛到外面由调用者来具体处理其抛出的异常。eg:
class Compute
{
public int div(int a,int b)throws Exception//在对应方法上要声明,说明对该函数中出现的异常是做抛出处理
{
if(b==0)
throw new Exception("除数不可为0!");//在方法内利用关键字throw抛出异常对象
return a/b;
}
}
另外一种方式是在方法内对异常进行捕捉和处理,利用try……catch……finally的组合方式。该组合方式有三种:
1、try
{//里面是可能出现异常的代码块
}
catch
{//该处捕捉异常,并在里面是对出现的异常的具体处理
}
finally
{//该处必须执行的代码(无论抛不抛出异常),通常用于控制一些对资源的访问操作,比如关闭资源等
}
2、try
{//里面是可能出现异常的代码块
}
catch
{//该处捕捉异常,并在里面是对出现的异常的具体处理
}
3、try
{//里面是可能出现异常的代码块
}
finally
{//该处必须执行的代码(无论抛不抛出异常),通常用于控制一些对资源的访问操作,比如关闭资源等
}
二、为了解决自定义对象中可能会出现一些不合逻辑的异常问题用默认异常对象无法具体描述的问题,用户在自定义对象时,可以自行设计异常类,对特定的异常问题进行描述和封装,在出现不合逻辑的异常问题(比如时分秒数不能大于60、员工工资不能过低等)的代码段,就可以抛出或者处理自定义的异常对象。
自定义异常对象的创建规则:必须继承自Exception(编译时异常)或者RuntimeException(运行时异常)类,让该子类具有可抛性,可通过构造函数设置相关提示信息,通过throw和throws进行操作。
三、有关Exception和RuntimeException类的区别:
1、Exception类及其子类对象,都是在编译时被检查出的异常,而RuntimeException及其子类,都是在运行时异常,在编译时不被检查的异常。
2、在抛出处理的方式上有差别:Exception及其子类异常抛出时,处理在函数内部用throw抛出异常对象外,还必须要在函数上用throws XxxException进行声明;而对于RuntimeException及其子类异常,只要在函数内部用throw抛出异常对象即可,无需再在函数上进行声明。
四、关于子类复写父类方法是的异常:有以下几种情况
1、子类覆盖父类方法,父类方法中有异常抛出:那么子类方法要么不抛出异常,要么抛出父类异常或其子异常,决不能抛出其他异常。
2、子类覆盖父类方法,父类方法抛出多个异常:那么子类方法只能抛出父类方法抛出的异常的子集。
3、当父类不抛出异常,那么子类决不能抛出异常,如果子类有异常则只能进行try处理,不能抛出。