java语言核心---异常的处理

Throwable类有两个子类

             1).Error 类  : 不可抗力的因素,例如:内存溢出...

             2).Exception类:   

                        编译异常:编译时期出现的异常 例如,  解析异常ParseException

                        运行异常:编译可以通过,运行时期出现的异常  例如, 空指针异常NullpointerException throw

Throwable类是Exception类的父类,子类可以调用Throwable类的方法
Exception为所有异常类的父类,使用多态,可以代表所有异常                      //多层继承
如何获取异常信息    用Throwable类的方法        
            1) String getMessage():获得异常描述的信息
            2) String toString():获得异常的类型和异常描述的信息(一般不用)
            3) void printStackTace():无返回值, 打印跟踪栈信息并输出控制台,不需要使用system.out.println   该跟踪栈信息中包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段都是使用printstackTrace

 //现在在catch语句块里,必须写 e.printStackTrace() 目的:查看异常的具体信息,方便调试和修改  

解决异常的方式有两种:

            1).利用try...catch语句处理异常

            2).利用throws 抛出异常

捕获一个异常:   

           格式:  try{

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

                 变量.printStackTace();

            } finally{

            }

捕获多个异常:

           

           格式:  try{

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

                 变量.printStackTace();

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

                 变量.printStackTace();

            }finally{

            }.......

//多个异常也可以用一个catch语句表示:        

                    try ......catch(异常类1 |异常类2........ )

//finally 里面的代码一定会执行,除非在finally语句之前使用 System.exit(statue) 即停止JVM    

注意:

          1). 捕获多个异常时,异常的范围必须是从小到大,不能从大到小 

          2). 自定义的异常必须继承于Exception类

IO流中的异常处理,在关闭流对象之前一般会进行非空判断,非空的话进行资源关闭,资源关闭语句一般在finally语句中

实例如图:


         

掌握异常的三个方面:
    1.五个关键字:try catch finally throw throws
    2.异常体系的两个继承结构
       1).Throwable类有两个子类(Error和Exception)
       2).Exception类有两个子类RuntimeException,checkException
       3).RuntimeException类及其子类称之为:Runtime异常,可以不做处理,默认jvm底层处理
       4).Exception类和子类(除了RuntimeException体系)称之为:check异常,必须抛出异常或者利用try catch语句处理 
    3.定义异常类
 
 //异常出现之后程序会中断,不在向下执行,需要处理异常才能向下执行
 
 //try finally和catch不能单独使用
    
面试题:
   1.Error和Exception的区别和关系

         答:Error:表示错误,一般指JVM相关的不可修复的错误,如系统崩溃,内存溢出,JVM错误等,由JVM抛出,我们不需要做任何处理
             Exception:表示异常,指程序中出现不正常的情况,该问题可以修复 (异常指的是运行异常,而不是编译异常)   
   
   2.check异常和runtime异常的区别
       Runtime异常:可以不做处理,利用throws抛出,最终默认jvm底层处理
       check异常:必须抛出异常或者利用try catch语句处理 
       
   3.如何保证一段代码必须执行到(finally)
   4.finally语句一定会执行吗?
       答:不一定  当try或catch语句调用退出jvm的方法时,则不会执行finally语句
       System.exit(0) 该语句就是退出jvm的方法
       
   5.finally和return执行顺序?
       答:当try或catch语句有return语句,则永远返回的都是finally里面的结果,利用debug工具可以查看底层是如何运行的
    
     eg:  private static int test2(){
          try{
          return 
                  0;
          }finally{
          return 
                  100;
          }               //返回的结果为100
        
          private static int test3(){
          int a=1;
          try{
          return 
                 a;
          }finally{
          ++ 
             a;
          }               //返回结果为 1,其实该结果在最初就确定了
          
          
       
   6.throw和throws的区别?
       答:throw:一般的,当一个方法出现不正常的情况时,我们不知道返回什么值,此时就返回一个错误对象,在catch语句中继续向上抛出异常,并结束语句
              格式  :throw new 异常类("异常的信息,比如by zero")
      
      throws:运用于方法声明之上,用于表达当前方法不处理异常,而是提醒调用者来处理异常(抛出异常)
   
   7.列举五个常见的异常类?
   8.列举五个常见的Runtime异常类?
   
       答: Runtime异常类:
       
       ArithmeticException: 算数异常
       NuPointerException:  空指针/引用异常
       ArrayindexException: 数组索引越界异常
       StringindexException:字符串索引越界异常
       NumberFormatException:数字格式化异常
       ClassCastException:  类型强制转换异常
   9.final,fanally,fanalize的区别?
   final可以修饰类,该类不能被继承;可以修饰变量,该变量是常量,可以修饰成员方法,该方法不能被重写
   finalize:gc():运行垃圾回收器,实际是调用finalize方法,和垃圾回收器有关系
   finally: 在io,数据库中以及后面对数据库操作(DBUtuls/c3p0/Hibernate/MyBatis)里面中释放资源的
   


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭