黑马程序员——java中的异常

来源:互联网 发布:hadoop java 统计订单 编辑:程序博客网 时间:2024/06/06 15:18

------- android培训java培训、期待与您交流! ----------

异常的概念:

            异常就是对问题的描述,将问题进行对象的封装

异常的体系:

      结构 :Throwable

                       |---Error

                       |---Exception

                               |---RuntimeException

       特点:  异常体系中的所有类以及建立的对象都具备可抛性,也就是说可以被

                     throw和throws关键字所操作。也只有异常体系具备这个特点。

        throw和throws的用法:

                 throw定义在函数内部,用于抛出异常对象。

                 throws 定义在函数上(在声明函数的小括号和大括号之间),用于抛出异常类,可以抛出多个,用逗号隔开

class MyException extends Exception{//继承Exception让MyException具有可抛性public void show()throws MyException{//在函数上抛出throw new MyException();//在函数内抛出}}
               注意:当函数内有throw抛出异常对象,并未进行相应的try处理,必须要在函数上声明,否则编译失败。

                            但是RuntimeException除外,也就是说如果函数内抛出RuntimeException或者他的子异常,函数上可以不用声明

                如果函数声明了异常,调用者需要进行处理。处理的方法可以是throws也可以是try

异常的种类:

             异常有两种

                 1 编译时被检测的异常

                               这种异常在编译时,如果没有进行处理(没有throws也没有try),编译失败。

                               该异常被标示,代表着可以被处理。

                2  运行时异常(编译时期不检测)

                               在编译时,不需要进行处理,编译器不会检测

                                该异常的发生,建议不要处理,让程序停止。需要修改代码。

异常处理语句:             

try{//需要被检测的代码}catch(){//处理异常的代码}finally{//一定会执行的代码}
处理语句的三种结合格式:

                  

//1try{}catch(){}finally{}//2try{}catch(){}//3try{}finally{}
          注意:

                 在finally中定义的通常是关闭资源的代码,因为资源必须释放。

                 finally只有一种情况不会执行,那就是执行到了System.exit(0),java虚拟机就退出了。

自定义异常:

          定义类继承Exception或者RuntimeException

                   1  让自定义的类具备可抛性

                   2  让该类具备操作异常的共性方法

          当到定义自定义异常的信息时,可以使用父类已经定义好的功能,将异常的信息传递给父类的构造函数

                  

class MyException extends Exception{//继承Exception让MyException具有可抛性MyException(String message){       super(message);//将异常信息传递给父类的构造函数}}
异常的好处:

          1  将问题进行封装

           2 将正常流程代码和问题代码想分离,方便于阅读

异常的处理原则:

          1 处理方式有两种: try 或者 throws

          2 调用到抛出异常的功能时,抛出几个就处理几个 ,一个try可以对应多个catch

          3 多个catch,父类的catch放到最下面。以为在最上面,下面的catch都执行不到,报错

          4 在catch内,需要定义针对性的处理方式,不要简单的定义输出语句,也不要不写。

          5 当捕获到异常时,如果本功能处理不了,可以继续在catch中抛出。

          6 如果捕获到的异常处理不了,但并不属于该功能出现的异常,可以将异常转换后,再抛出和该功能相关的异常

异常在子父类覆盖时:

          1 子类抛出的异常必须是父类的子类或者子集

class A extends NullPointerException{public void show()throws NullPointerException{}}class B extends A{public void show()throws A{//只能抛出NullPointerException或者NullPointerException的子类A}}

           2 如果父类或者接口没有异常抛出时,子类覆盖出现异常,只能try不能throws

class A extends Exception{public void show(){//父类方法没有抛出异常}}class B extends A{public void show(){try{//子类覆盖时只能try不能throwsthrow new A();}catch(Exception e){}}}



                        













      

0 0
原创粉丝点击