课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 多使用异常,把性能问题放一边
  • 多使用异常,把性能问题放一边

    发布:昆明Java培训      来源:达内新闻      时间:2016-10-24

  • 昆明Java培训机构的老师知道,知道异常是主逻辑的例外逻辑,举个简单的例子来说,比如我在马路上走(这是主逻辑),突然开过一辆车,我要避让(这是受检异常,必须处理),继续走着,突然一架飞机从我头顶飞过(非受检异常) 我们可以选在继续行走(不捕捉),也可以选择指责其噪音污染(捕捉,主逻辑的补充处理),再继续走着,突然一颗流星砸下来,这没有选择,属于错误,不能做任何处理。这样具备完整例外场景的逻辑就具备了OO的味道,任何一 事务的处理都可能产生非预期的效果,问题是需要以何种手段来处理,如果不使用异常就需要依靠返回值的不同来进行处理了,这严重失去了面向对象的风格。

    昆明Java培训机构的老师在编写用例文档(User case Specification)时,其中有一项叫做"例外事件",是用来描述主场景外的例外场景的,例如用户登录的用例,就会在"例外事件"中说明"连续3此登录失败即锁定用户账号",这就是登录事件的一个异常处理,具体到我们的程序中就是:

    public void login(){

    try{

    //正常登陆

    }catch(InvalidLoginException lie){

    //   用户名无效

    }catch(InvalidPasswordException pe){

    //密码错误的异常

    }catch(TooMuchLoginException){

    //多次登陆失败的异常

    }

    }

    如此设计则可以让我们的login方法更符合实际的处理逻辑,同时使主逻辑(正常登录,try代码块)更加清晰。当然了,使用异常还有很多优点,可以让正常代码和异常代码分离、能快速查找问题(栈信息快照)等,但是异常有一个缺 :性能比较慢。

    Java的异常机制确实比较慢,这个"比较慢"是相对于诸如String、Integer等对象来说的,单单从对象的创建上来说,new一个IOException会比String慢5倍,这从异常的处理机制上也可以解释:因为它要执行fillInStackTrace方法,要记录当前栈的 快照,而String类则是直接申请一个内存创建对象,异常类慢一筹也就在所难免了。

    而且,异常类是不能缓存的,期望先建立大量的异常对象以提高异常性能也是不现实的。

    难道异常的性能问题就没有任何可以提高的办法了?确实没有,但是我们不能因为性能问题而放弃使用异常,而且经过测试,在JDK1.6下,一个异常对象的创建时间只需1.4毫秒左右(注意是毫秒,通常一个交易是在100毫秒左右),难 道我们的系统连如此微小的性能消耗都不予许吗?

    昆明Java培训机构的老师提醒注意:性能问题不是拒绝异常的借口。

    推荐文章

上一篇:java程序里面异常只为异常服务

下一篇:java中借助commons-fileupload实现文件上传

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56