thingking in java 读书笔记---异常处理

 
抛出异常:throw new Exception e (“description”); 可以不带参数。
异常说明:public void f () throws aException,bException{}
 
java的标准异常:最上层的基类是Throwable,下面分Error表示你不必关心的编译期和系统错误,Exception是可以抛出的异常的基类。Exception分为RuntimeException和普通的异常,RuntimeException由java虚拟机自动抛出,你不必对它们进行处理,也不必把它们放到异常说明里面,如果RuntimeException没有被捕获而直达main函数,那么在程序推出前会调用它的printStackTrace()方法。对于其他的普通异常,需要程序员进行抛出,编写异常处理函数。
 
异常处理的框架:
try   {
  
// The guarded region: Dangerous activities
  
// that might throw A, B, or C 
}
  catch (A a1)  {
  
// Handler for situation A
}
  catch (B b1)  {
  
// Handler for situation B
}
  catch (C c1)  {
  
// Handler for situation C
}
  finally   {
  
// Activities that happen every time
}

 

捕获时候,判断的时候,先判断特别的,特殊处理,把基类放在后面,尽量不要遗漏。最后一个是catch(Exception e); finally总是能运行,不论是不是有异常。

 

异常的限制:

子类继承父类的时候,子类中重载的函数不能抛出基类中的函数更多的异常,可以抛出相关异常的道出类。为的是确保向上转型时候,能正确的捕获所有的异常。但是构造函数不在这个限制中间。因为构造函数的调用方式不同,子类的构造函数可以抛出任意的异常,且在其异常说明里面,必须包含父类构造函数的异常说明,但派生类构造函数不能捕获父类构造器抛出的异常。

 

异常处理的其他方式,如果不确定如何处理异常可以用下面的方法简化处理过程:

1,把异常抛出给控制台,也就是main函数抛出异常,这样就不用在main()函数里面写trycatch子句了。

2,普通异常转化为RuntimeException。构成异常链,在需要的时候,还可以找到最初抛出异常的地方和信息。使用异常的getCause函数。语法如下:

 

catch (Exception e)  // Adapt to unchecked:
      throw new RuntimeException(e);
}

解析:
catch (RuntimeException re)  {
        
try {
          
throw re.getCause();
        }
 catch(FileNotFoundException e) {
          System.out.println(
            
"FileNotFoundException: " + e);
        }
 catch(IOException e) {
          System.out.println(
"IOException: " + e);
        }
 catch(Throwable e) {
          System.out.println(
"Throwable: " + e);
        }

      }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值