第9章:异常处理

java的基本理念是:结构不佳的代码不能运行。

1。异常情形是指发生阻止当前方法或者作用域继续执行的问题。但抛出异常后,java先使用new再堆上
     创建一个异常对象的引用,然后当前执行路径被终止,并且从当前环境中弹出堆异常对象的引用。此时,
    异常机制接管程序,并在异常处理程序中继续执行。

2。java所有的标准异常都有两个构造器,一个缺省,一个接受字符串。异常根类为Throwable,
      Error,Exception继承此类。

3。捕获所有异常可以使用catch(Excetion e){....}.它从Throwable继承的方法有;
     String getMessage(); //返回消息字符串
     String  getLoacalMessage()  //此 throwable 的本地化描述。
     String  toString()   //返回Throwable的简单描述。
     void printStackTrace();
     void printStackTrace(PrintSteam);
     void printStackTrace(java.io.PrintWriter);
     Throwable fillStackTrace() ;   //用于Throwable的内部记录栈帧的当前状态。在重新抛出异常是用。

4。异常处理中可以重新抛出异常,异常抛给上一级环境处理,同一个try语句的catch子句都回忽略。

5。捕获一个异常后抛出另一个异常,形成异常链。在Throwable的子类种,只有三种异常类提供了cause
     参数的构造器,他们是:Error ,Exception以及RuntimeExcepion.如果要把其他类型的异常连接起来,
     应该使用initCause()方法。

6。如果对null引用,java会自动抛出NullPointerException异常。不需要:
     if (t == null )
          throw new NullPointerException() ;
    运行时异常不需要在异常说明中把他们列出来。

7。java比c++的异常添加了finally关键字,表示无论如何都会执行。语法:
    try(){
   }
    catch(){
   }
  .....
  finally(){
  }
  java自动回收内存,finally所做的工作一般使关闭文件,网络连接等等。在finally中抛出异常,导致原来的异常
    丢失。

8。java依catch次序捕获异常,而且可以按"向上转型形式"捕获,所以可以用catch(Exception e) 来捕获所有异常。

9。覆盖方法时,只能抛出基类方法的异常说明列表的那些异常,或者不抛出异常。即:抛出异常只能缩小,不能
     被放大。但是,继承中,在构造器中可以扩展异常。

10。异常处理的一个重要原则是"只有你知道如何处理的情况下才捕获异常"。否则就会导致"吞食则有害"的问题,导致
     异常丢失。有时候把异常传递给控制台,不用try.catch。或者把被检查的异常转化为不检测的异常。例如:
    try{
    //...to do something useful
   }catch(IDnotKnowWhatToDoException e){
   throw new RuntimeException(e)
  } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值