囧,Scala2.7.x上发现一个隐蔽的大bug, finally的异常被catch回去了。。。

不好意思关于Scala的第一篇就是关于Scala的bug。。。

 

 

Java中异常捕获:

class OE {
public static void main(String args[]) {
try {
System.out.println("hi");
}
catch (Exception e) {
System.out.println("GOT HERE");
}
finally {
throw new RuntimeException("ouch");
}
}
}
 

 

输出:

hi
Exception in thread "main" java.lang.RuntimeException: ouch
at OE.main(OE.java:11)
 

 

Scala中的异常捕获:

try {
 println("hi")
}
catch {
 case e => println("GOT HERE")
}
finally {
 println("in finally")
 throw new RuntimeException("ouch")
}

 输出:

 

hi
in finally
GOT HERE
in finally
in finally
java.lang.RuntimeException: ouch
       at Test$.main(finally.scala:11)
       at Test.main(finally.scala)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:616)
       at scala.tools.nsc.ObjectRunner$$anonfun$run$1.apply(ObjectRunner.scala:75)
       at scala.tools.nsc.ObjectRunner$.withContextClassLoader(ObjectRunner.scala:49)
       at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:74)
       at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:154)
       at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala

 

finally 打印后抛出异常,然后又catch回去了,再接着打印了两次"hi finally"....

 

这个bug肯定会在2.8中修复。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值