9.异常体系

Java.lang.Throwable

                   |----Exception:程序可以处理的异常

                   |----Error:与虚拟机相关问题,系统崩溃,虚拟机问题,内存不足,内存堆栈溢出……建议程序停止。

 

异常:程序在运行时出现不正常情况,java对不正常情况进行描述后的对象体现。

-------------------------------------------------

常见的处理方法

   |---String getMessage();

          |---String toString()

          |---void printStackTrace();

(jvm默认的异常处理机制其实就是调用printStackTrace());

-------------------------------------------------

 

异常的处理:

try { …}

catch(异常类 变量 ) { //处理几个异常就声明几个catch

多个catch块中的异常出现继承关系时,父类catch块要放在子类catch下面

finally{ …}//非必须,但声明后一定会执行,一般用于释放资源

Eg:数据库异常时无法关闭数据库,可使用finally,对资源的关闭


例外:System.exit(0)系统退出,jvm结束,finally不执行。

------------------------------------------------


异常的声明(throws

编写Demo时,代码可能发生异常

通过throws声明功能可能会出现的异常:

Eg:  int div(int a ,int b)throws Exception{

                             Return a/b;//我们知道b=0时会抛出ArithmeticException;

public static voidmain(String [] args){

try{ …} catch(Exception e){ …}

}

 

catch 处理时,最好要有具体的处理形式,例如异常日志文件等)

-------------------------------------

自定义异常:

项目中会出现持有的问题,而这些问题并未被java所描述并封装对象时,可将这些问题进行自定义的异常封装(自定义类继承异常类)

 

继承异常的原因:

因为异常类和异常对象都被抛出,他们都具备可抛性,这个可抛性是Throwable体系特点,只有这个体系中的类和对象才可以被throws和throw操作

------------------------------

 

假设:a/b中,除数如果是负数和0都认为是错的异常描述。

class IException extendsException{

//可重写Exception方法;

//定义构造方法;//与普通类继承基类相似构造;

父类把异常信息操作完成了,子类只要在构造时用super(message)传递信息给父类,即可调用父类方法(getMessage())

class Demo{

          int div(int a,int b)throwsIException{

if(b<=0)

throw new IException();// 函数内throw 异常,在函数上要

                                                  //声明或者在内部处理

return a/b;

}

--------------------

throw和throws的区别:

throws使用在函数上,throw使用在函数内,throws后跟若干个异常类,逗号隔开,throw后跟异常对象。

---------------------------------

 

异常

          |----编译时被检测的异常

          |----编译时不被检测,运行时异常(RuntimeException以及其子类)

RuntimeException:

特点:函数内抛出,函数上可不声明,编译通过(不需要让调用者处理,当异常发生,希望程序停止,希望停止程序后,由程序员对代码进行验证

若在函数上声明,调用者可不处理,编译通过。

心得:如果希望某异常发生时程序停止,就让自定义异常继承RuntimeException

 

-----------------------------------

异常在父类覆盖中的体现:

  1. 1.  子类在覆盖父类时,如果父类的方法抛出异常,那子类的覆盖方法,只能抛出父类的异常或该异常的子类:

class AException extends Exception{

…}

class BException extends AException{

…}

class CException extends Exception{

…}


class Fu {

              voidshow()throws AException{…}

}

Class Zi extends Fu{

              Voidshow()throws AException ,BException{//不能声明CException}

}

(如果子类真发生其他异常,只能try处理,不能抛出)

------------------------------

  1. 2.  如果父类方法抛出多个异常时,那么子类在覆盖方法时,只能抛出父类异常的子集,即父类若抛出AException,BException,则子类可抛出其中之一或两个。

  2. .  如果父类或者接口的方法中无异常抛出,子类在覆盖方法时,不可以抛出异常,只能处理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章