`
lg_asus
  • 浏览: 185074 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

java异常

 
阅读更多
运行时异常可以不捕获,即使一段代码不可能抛出这个RuntimeException,你也可以在任何时候任何地点抛出这个RuntimeException,因此我建议RuntimeException不抛也不捕获,统一交给处理程序最后处理(调用者一般不会知道一个方法会抛出哪些RuntimeException的,因此由程序统一处理)


重写方法时,不能声明抛出和父类方法异常不兼容的异常。如父类抛出一个IOException,这时子类方法可以抛出IOException或Exception(不然里氏替换原则不满足),也可以不声明抛出异常。


编译期异常要显式捕获或往上抛(方法里要显式声明抛转这个异常)。

代码里尽量不捕获异常,但要声明抛出异常。捕获异常的工作尽量交给调用者来处理。

try catch finally  不要在finally中return, finally一般做些释放资源的事情。
如果方法在try 或 catch中返回值的话,即使这个值在finally中做了更改,这个更改值无效(但是在eclipse debug中能看到值变了,但方法返回的结果却是try(catch)中的值,除非你在finally中直接return,但是不建议这么做。因此finally中最好不要有return(eclipse这时会提示警告!)

java思想4edition中提到:吞没异常的两种可能,1: finally中也抛出了异常,这样try中抛出的异常就会被吞没;2:finally中有return语句。
第一种情况,如在finally中关闭网络连接,释放文件资源等,这时的异常一定要自己捕获,不能再往外抛了,否则try中的异常就会被吞了。

java中部分Error是可以捕获的,如StackOverflowError, 而且捕获后vm可以继续工作,StackOverflowError也可象Exception一样一级一级往上抛。但是有的Error不会被捕获,如OutOfMemeoryError, 此时vm也会终止。more debate see http://stackoverflow.com/questions/352780/when-to-catch-java-lang-error
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics