黑马程序员_Java_异常机制及常见异常总结

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流!----------------------

一、异常


            1.什么是异常
                      在程序运行时出现的错误.

 

            2异常体系:
                    Throwable
                            |--Error 严重的问题,是处理不了的。要改正代码的。
                                      |--Exception 非RuntimeException的,是需要处理的。编译期异常。
                                                  |--RuntimeException 不需要处理的,是需要改代码的。运行期异常。


            3.异常的分类
                     (a).Throwable, 可以被抛出的. 是所有错误和异常的父类.
                     (b).Error, 严重的错误, 一般由虚拟机抛出, 程序中无法对其进行处理.
                     (c).RuntimeException, 运行时异常. 在程序中经常会出现的一些错误, 通常我们对其不进行处理. 这些异常如果没有处理在编译的时候不会报错.
                     (d).Exception(不包含RuntimeException), 编译时异常, 必须在程序中进行处理的异常.


          

          4异常的解决方案:


                    A:自己处理
                            基本格式:
                              try{
                                   可能发生异常的代码;
                                  }catch(异常类名 变量名){
                                     异常的处理代码;
                                 }finally{
                                    释放资源的代码;
                                }
                           注意:一旦有一次发生,就会立马执行catch里面的代码。

                            变形格式:
                                  try...catch
                                  try...catch...catch
                                  try...catch...catch...finally
                                   try...finally
   
                           JDK7针对多个catch进行了优化:
                                   catch(异常1 | 异常2 | 异常3 ... 变量){}

                           注意:这些异常必须是平级关系。
                                   和try...catch...catch的不同点是
                                   JDK7的这种方案是必须平级关系,不能有子父关系。
                                    而try...catch...catch父亲放最后是可以的。


                    B:抛出处理
                                   用throws关键字在方法上声明(抛出)。


           5.异常细节
                   (a). printStackTrace();
                               打印异常的详细信息, 包含3部分
                               异常的全限定名(包名.类名)
                               异常的message
                               异常的出现位置
                   (b). 子类不能比父类抛出更多的异常
                              子类只能比父类强, 不能比父类弱
                   (c). 处理多个异常
                              try中写有可能出异常的代码, 针对多个异常写多个catch 或者 catch抓Exception
                             在方法签名上声明抛出多个异常, 以","分割
                   (d). finally嵌套使用
                             在程序中有可能多条代码都是必须执行, 而其中某些语句也会抛出异常.
                             那么就需要在finally中嵌套使用try, 将有可能出现异常的语句放在try中, 其他必须执行的语句放在与之对应的finally中


          5.自定义异常
                           我们可以自己定义一个异常, 继承Exception, 重写其构造函数          6:Exception和RuntimeException的区别?
                           A:Exception 编译时期异常,必须处理的。
                                      如果在方法上,throws了该类型的异常,将来调用者必须处理。
                                      如果在方法内部,throw了该类型的异常,必须在方法上throws该异常。
                           B:RuntimeException 运行时期异常,是不需要处理的。要改代码的。
                                      如果在方法上,throws了该类型的异常,不需要处理。
                                      如果在方法内部,throw了该类型的异常,方法上可以throws该异常,也可以不throws该异常。


            7:throw和throws的用法和区别?
                   A:throw
                         用法:用在方法内部,后面跟的是异常对象名称。
                         区别:用throw抛出了编译时期异常,方法上面必须用throws抛出。
                         用throw抛出了运行时期异常,方法上面可以不用throws抛出。
                  B:throws
                          用法:用在方法声明上,后面跟的是异常类名。
                          区别:用throws在方法上声明了异常,内部可以没有throw

 

二:常见异常总结:            ArrayIndexOutOfBoundsException数组角标越界异常

            NullPointerException空指针异常

            UnsupportedOperationException不支持的操作

            IndexOutOfBoundsException索引出界

            IllegalStateException非法状态

            ClassCastException:数据类型转换异常。

            SQLException:操作数据库异常类。

            NumberFormatException:字符串转换为数字类型时抛出的异常。

             java.lang.ClassNotFoundException  异常的解释是"指定的类不存在"。

             java.lang.ArithmeticException  这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常。

             java.lang.ArrayIndexOutOfBoundsException异常的解释是"数组下标越界"。

             java.lang.IllegalArgumentException这个异常的解释是"方法的参数错误。

             java.lang.IllegalAccessException这个异常的解释是"没有访问权限"。

             EmptyStackException(空栈异常)。

 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流!----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值