zoukankan      html  css  js  c++  java
  • 用throws抛出异常与用try..catch..捕获异常有什么不同

    举个例子
    public class A
    {
    public void method1 throws Excetpion
    {
    //可能有一个SQLException
    }
    }
    //调用类捕获异常
    public class B
    {
    private A a;
    try
    {
    a.method1();
    }
    catch(Exception e)
    {
    System.out.println(e);
    }

    }

    异常处理的原则

    1、如果无法处理某个异常,那就不要捕获它。
    2、如果捕获了一个异常,请不要胡乱处理它。
    3、尽量在靠近异常被抛出的地方捕获异常。
    4、在捕获异常的地方将它记录到日志中,除非您打算将它重新抛出。
    5、按照您的异常处理必须多精细来构造您的方法。
    6、需要用几种类型的异常就用几种,尤其是对于应用程序异常。    

    java异常可以分成两大类:Exception和RuntimeException(虽然RuntimeException是从Exception继承的)。exception异常代表“无法避免的异常” 如io异常 往往这类异常是由于外部原因造成的,程序本身无法保证他们不发生,所以这类异常必须捕获。如果在函数内部无法处理这个异常必须再次抛出(在函数后面用throws语句),如果什么都不做就出现编译错误。
    runtimexception是指“可以避免的异常”,如 null引用异常,这类异常都是由程序内部原因造成的,是可以避免的。对于这类异常可以忽略他们,但一旦发生程序就会异常终止。这类异常对debug非常有帮助,当然,如果需要也可以catch

    理论上讲,应该捕捉一切可以预知的异常。当然,如果不是最终的使用者(客户程序员),而是类库提供者,可以throws,因为你可以确知这些异常会最终被处理;否则,一定要谨慎的使用throws,因为可能最终exception不会被正确处理。

    的确是有这样的特例的。比如,在jsp里,即使不处理异常也不抛出,因为jsp本身机制,也不会报编译错。这个时候,可能会使这个异常成为类似于RuntimeException的东西,让最终用户看到。这种做法是不负责任的。

    RuntimeException只是一个概念,实际上,本来所有的Exception都一样,本质上RuntimeException不会另行处理。所以,是不是throws,还是要根据你的总体设计中bean所处的地位来进行判断。

    一句话总结:

    除非你想把异常处理的责任交给调用者,一般不用throws, 。

    解释:
    比如你要读入一些文件,如果你想通知调用者,让调用者决定如何
    处理这个异常,你就把这个异常throws给调用者;
    如果你知道应该如何处理这个异常,或者你想把异常马上解决,
    你可以就地catch她。

    这完全取决于你想把异常自己立即处理还是想把处理责任返回给调用者。
    取决于你的程序的结构和要求。

    我的经验,大多是抛出后,被一级调用者处理,如果一级调用者再次抛出
    此异常给二级调用者,很容易使问题复杂化;另外,还有一种情况就是
    立即catch

    高效处理Java异常的两种方法

    作者: BUILDER.COM

  • 相关阅读:
    Marshal Code Into Another Thread(STAThread)
    MongoDB分片实战(二):Sharding
    项目中如何添加CorePlot开源框架(重温Xcode链接静态库)
    Xcode4.2中将Three20开源库导入到工程项目中
    Ajax在MVC中的使用
    位枚举的学习
    MVC3+NHibernate项目实战(二) :数据库访问层
    MVC3+NHibernate项目实战(一) :项目设计
    Android VideoView
    00设计原则
  • 原文地址:https://www.cnblogs.com/xuanyu/p/2418089.html
Copyright © 2011-2022 走看看