异常

Throwable常用的方法:

      1. toString()      返回的是用于描述该异常情况的类的完整类名。   包名+ 类名 = 完整类名。

      2. getMessage()    返回创建Throwable对象的时候传入的消息字符串的,

      3. printStackTrace() 打印异常的栈信息。

----| Throwable

---------| Error 错误一般都是由于jvm或者是硬件引发的问题,所有一般都不会通过代码去处理。

---------| Exception 异常  如果程序出现了异常,那么一般就需要通过代码去处理了。

疑问:程序出现了不正常情况,我怎么能区分到底是错误还是异常呢?

      如果不正常情况的消息是以Error结尾的,那么则代表了这是一个错误,

      如果不正常情况的消息是以Exception结尾的,那么则代表是一个异常。

异常:

疑问: 怎么会有异常的栈信息出现呢?

           异常的栈信息是通过printStackTrace的方法打印的,那么异常对象从何而来?

java虚拟机在执行a\b代码的时候,发现b(除数)等于0在现实生活中是属于一种

不正常的情况,jvm一旦发现了不正常的情况,那么就会马上创建一个相应的异常对象,

并且调用该异常对象的printStackTrace方法把异常的信息打印处理。

异常的处理方式:   

      方式一: 捕获处理。    

      捕获处理的格式:         

           try{

                 可能会发生异常的代码

           }catch(异常的类型 变量名){

                 异常处理代码;

           }

      捕获处理要注意的细节:

           1. 如果一个try块的代码出现了异常经过处理之后,那么try-catch块外面的代码可以正常执行。

           2. 如果一个try块中出现了异常的代码,那么在try块中出现异常代码后面的所有代码都无法正常执行。

---------| Throwable  所有错误与异常的父类

---------------| Error  错误,错误一般都是由于jvm或者是硬件引发的问题。一般都不会通过代码处理错误。

---------------| Exception 异常, 异常我们是需要通过代码去处理的。

异常的方式处理:

      方式一: try-catch块的处理方式 捕获处理

           格式:

                 try{

                      可能会发生异常的代码

                 }catch(异常类型 变量名){

                      处理异常的代码。。

                 }

      捕获处理要注意的细节:

           1. 如果一个try块中出现了异常代码经过处理之后,那么try-catch块外面的代码可以正常的执行。

           2. 如果一个try块中出现了异常的代码,那么在一个try块中出现异常代码后面的代码无法正常执行。

           3. 一个try块后面可以跟有多个catch块,也就是说一个块可以捕获多种异常的类型。

           4. 一个try块后面可以跟有多个catch块,但是捕获的异常类型必须按照从小到大进行捕获。

异常的处理方式2: 抛出处理. (throw 、 throws)

抛出处理要注意的细节:

      1. 如果一个方法的内部抛出了一个编译时异常对象,那么必须 要在方法声明抛出。

      2. 如果调用了一个声明抛出编译时异常类型的方法,那么调用者必须要进行处理,否则编译报错。   

      3. 一个方法如果遇到了throw关键字,那么该方法会马上停止执行。

      4. 在一个种情况下只能抛出一种异常对象。   

throw 与  throws的区别:

      1. throw关键字是用于在一个方法的内部抛出异常对象的,throws是用于在方法上声明抛出异常类型的。      

      2. throw关键字后面跟的是一个异常的对象,throws后面跟的是异常的类   

      3. throw关键字一次只能抛出一个异常对象,throws一次可以声明抛出多种异常类型。  

什么时候使用抛出处理?什么时候使用捕获处理?

      如果需要通知调用者出了异常,那么则需要使用抛出处理。

      如果与用户直接打交道的代码就使用捕获处理,千万不能抛出,一旦抛出就抛给了用户。

-----| Throwable 所有异常与错误的父类

----------| Error 错误 错误一般都是由于jvm或者是硬件引发的问题。一般不通过代码处理

----------| Exception 异常。 异异常需要处理

---------------| 运行时异常 (RunTimeException以及RuntimeException子类 )     如果一个方法内部抛出了一个运行时异常对象,那么方法声明可以声明抛出也可以不声明抛出

,如果调用了一个声明抛出运行时异常类型的方法,那么调用者可以处理也可以不处理。

---------------| 编译时异常(非运行时异常,受检异常 )   如果一个方法内部抛出了一个编异常译时异常对象,那么该方法则必须要声明抛出,

如果调用了一个声明抛出编译时异常类型的方法,那么调用者必须要处理.

疑问:为什么java编译器对运行时异常管理得如何宽松呢?

      因为运行时异常是可以通过程序员良好的编程习惯避免发生的。

sun使用了很多类描述java程序中各种不正常的情况,

但是不足以把世界上所有不正常的情况都描述清楚,

那么 我们则需要自定义异常类。

如何自定义异常类:

自定义一个类继承Exception即可。

finally 块

finally块的使用前提: 必须要配合try块使用,不能单独使用。

finally块的代码在任何情况下都可以执行,只有在jvm退出的情况才不会执行。

posted on 2018-09-08 16:35  天才疯子都在右  阅读(146)  评论(0编辑  收藏  举报

导航