写得太好了,感觉都在点子上 投个精华
个人不喜欢这些比喻(不要砸我),感觉扰乱了思维,有点牵强
呵呵,给楼主的砖头添加点个人体会 : )
- 异常:不符合预期的情况时就会发生。
- 什么时候需要异常:任何非预期的情况,包括输入或者非预期的逻辑,都需要抛出异常。
- checked异常:checked exception不要用,直接包装到Runtime异常中,交给上层处理。
- 异常显示友好:在系统外部,异常必须优雅的展示,而不是导致当前线程或者进程崩溃。
- 自定义异常:如果存在特殊的异常处理策略时,定义自定义异常,这样可以针对特定异常进行处理。
- 异常记录:一般在组件(如jar包)边界记录异常,或者人机交互层记录异常。
ronghao 写道
今天的问题是关于异常,自然,今天的主角是异常之神。
我问:大神,异常到底是个什么东西哩?什么情况下我们需要抛出异常呢?
果然是异常之神,很异常,反问:如果老婆叫你去超市买虾,虾刚好卖光了,你会怎么办?
我想都没想,说:给老婆打电话哈!
神仙说:这就是异常!
我说:不能完成买虾这个任务?
神仙说:不在你控制范围内的因素所造成的问题、没有预料到的情况就叫异常。在上面这个例子里,由于你没法控制超市是否还有虾,所以当你面临这个问题而又无法自己解决时就会抛出这个异常。
我说:哦,异常有两个特点,一个是造成不能正常执行任务的因素不在我的控制范围,二是我自己没有足够的信息进行处理,只能抛出。
我问:我知道JAVA里异常有checked和runtime之分,用哪个好呢?
神仙说:继续前面的问题,你和老婆打了电话,结果发现是女儿要吃虾,这时会怎么办呢?
我说:老婆会让我等等,然后去问我女儿,然后再回答我,女儿说了,可以吃鱼。
神仙说:实际处理这个问题的是你女儿?
我说:是的。
神仙说:那为什么你不直接让你女儿接电话哩?
我说:因为女儿管她妈妈,她妈妈管我。
神仙说:如果是checked异常,那么尽管妈妈不能处理这个问题,她还是需要处理;如果是runtime,那么妈妈就不用操心啦。
我说:我明白了,checked异常强制我们在发生异常的地方进行处理,哪怕实际我并不能处理,只会产生一坨一坨的try catch,runtime能够让我们在能够处理异常的地方才捕获这个异常。
神仙说:异常处理有一项很重要的目标,就是将处理异常的代码从异常发生的地方移开。这样就能在一个地方集中精力去解决你想解决的问题,然后再到另一地方去处理这些异常问题。程序的主线就不会被异常处理这类枝节问题给搞得支离破碎,程序也更易于理解和维护。
我说,所以都用runtime异常,第三方的checked异常如果不能立即处理,那么也应该转为runtime。
神仙说,异常处理的一个重要准则是:如果你不知道该如何处理这个异常,那么你就别去捕捉它。
我说,太好了,checked异常必须处理,runtime异常不用处理!
神仙说,你会直接在用户界面打印出一坨坨黑白相间的美妙异常栈?
我说,当然不会,我会统一跳转到一个出错页面。
神仙说,难道这不是对异常的处理吗?
我说,恩,也是。
神仙说,所有异常必须处理!在程序里可以抛异常,但是决不能把异常抛给最终用户。BUG在程序员手里还不是BUG,但是一旦交付,那么就是BUG。
我问:出现异常的地方我直接new RuntimeException()可以吗?反正最后是告诉老婆买不成虾。
神仙说,如果你女儿问为什么没买到虾怎么办?
我说,我会告诉她虾卖完了。
神仙说,信息在哪儿呢?
我说,我明白了,扔出异常一定要加上异常信息。
神仙说,非常重要!对于最终用户可能仅仅是个出错页面,但是对于需要解决这个问题的程序员来说,异常信息就非常重要了。
我说,所以如果是自定义异常,那么一定要加异常信息;如果是checked异常转runtime则一定要保存原有的异常,形成异常栈。
我问:好吧,我看到很多程序都自定义异常。
神仙说,如果是通货膨胀钱没带够而买不了虾怎么办?
我说,我会回家取钱。
神仙说,那么如果是虾没了呢?
我说,那买个鬼,卖鱼罗。
神仙说,所以需要自定义异常,这样可以产生不同的异常处理策略。
我说,如果需要对不同的异常进行不同的处理,那么就需要自定义异常。
神仙说,自定义异常需要有自己的继承体系,这样当我不想单个处理时,可以对一种类型的异常采用统一的一种处理,例如spring的DataAccessException。
我暗喜:正在写工作流异常模式哩,何不一起问一下?哈哈。
神仙说:未完待续,敬请期待工作流异常的问与答。
分享到:
相关推荐
标题中的“答复: 一道经典线程面试题的4种解法”暗示了这是一个关于多线程编程的问题,通常在面试中出现,用于评估候选人的并发处理能力。在这个问题中,可能涉及到同步、线程安全、锁机制等关键概念。 在Java中,...
标题中的“答复: 通过代码简单介绍JDK 7的MethodHandle,并与.NET的委托对比(二)”表明本文将深入探讨Java中的MethodHandle概念,并将其与.NET平台上的委托进行对比。MethodHandle是JDK 7引入的一个强大特性,它...
15. 答 复 或 承 诺 证 明 文 件(编号):记录客户答复或承诺的证据,以便于了解客户的承诺。 16. 主管:记录该异常单的主管,以便于了解责任人。 17. 经办人:记录该异常单的经办人,以便于了解处理人。 四、知识点...
- 肯定答复与否认答复:对一般疑问句的回答,肯定答复用“Yes, + 主语 + 助动词/情态动词。”,否定答复用“No, + 主语 + 助动词/情态动词 + not。” 2. 具体题目解答: - 1. It is fun at school. 否认句:It is...
博文链接:https://eric2007.iteye.com/blog/158580
10. **持续集成与持续部署(CI/CD)** - 配置自动化构建和测试,如Jenkins,以尽早发现并修复问题。 - 实施自动化部署,提高交付效率。 以上规范旨在提升代码质量和团队协作效率,对于Java开发者来说,理解和遵循...
4. 答复内容:答复意见书应包括案件的基本情况、作出具体行政行为的事实与理由、相关的证据材料,并依据适用的法律、法规、规章和其他具有普遍约束力的命令、决定。 5. 事实与理由:这部分是答复意见书的核心,需要...
标题中的“答复:答复‘通向开放未来的捷径’”暗示了这是一篇对某个讨论或议题的回应,特别是关于开放科学和知识发布的路径。在描述中提到的SpringerNature是一家知名的学术出版机构,它涉及的社论可能讨论了如何在...
总结来说,有效利用《公司客户供应品异常单》能够提升企业的供应链管理水平,强化与客户的沟通,增强客户信任,最终实现企业的长期稳定发展。在实际操作中,企业应根据自身业务特点,不断完善和优化此模板,使其更加...
- **分析对比文件**:代理人在答复时需深入分析对比文件,判断审查员关于新颖性和创造性的评价是否合理,以此决定反驳策略。 OA答复的策略应根据审查意见的类型和对比文件的分析结果制定: - **有授权前景**:...
### 在Word2021中如何答复批注 #### 知识点概述 在Microsoft Word 2021中,用户可以通过多种方式对文档中的批注进行答复。这对于团队协作和文档审查非常重要,因为它允许作者和其他参与者就文档内容的具体部分进行...
审查意见通知书答复方法及技巧 第一节 实质审查程序及原则 第二节 申请文件的修改 第三节 审查意见的理解 第四节 审查意见答复原则与策略 意见陈述书 是否修改? 如何阐述理由? 结尾
专利审查流程中,审查意见通知书(OA,Office Action)是审查员向专利申请人发出的关于专利申请实质审查结果的正式通知。理解并妥善答复审查意见通知书对于专利申请的成功至关重要。下面详细阐述在答复审查意见通知...
专利审查意见的答复与技巧 本资源主要介绍了专利审查意见的答复与技巧,主要包括实质审查程序及原则、申请文件的修改、审查意见的理解、审查意见答复原则与策略等内容。 实质审查程序及原则 -------------------- ...
肯定答复:Yes, there are. 否定答复:No, there aren't. 对于情态动词,如can,否定形式是在其后加"not",一般疑问句则将其提前到句首。例如: 2. 肯定句:Li Ming's father can drive the car. 否定句:Li ...
在答复审查意见时,申请人需详细分析新修改的独立权利要求与对比文件1和2的区别,并阐述这些区别如何使得本发明具备新颖性。例如,对比文件1可能只公开了部分技术特征,而本发明则增加了独特的技术特征,如特定的...
【口语交际答询技巧】 答询技巧是日常生活和工作中必不可少的交际能力,尤其在面试、会议、客户服务等场合显得尤为重要。答询不仅是对他人问题的回应,更是展示个人素养、思维能力和应变能力的重要途径。以下是一些...
【VB答复精选的软件源码】是一份珍贵的资源,主要包含了使用Visual Basic(VB)编程语言编写的各种示例代码和实用程序。VB是Microsoft公司推出的一种面向对象的编程工具,它以其简单易学、功能强大而受到广大开发者...
- 答复:`These are...`:这些是... - `What are they?`:它们是什么? - 答复:`They are...`:它们是... 4. **形容词及反义词**: - `new`:新的 - `old`:旧的 - `tall`:高的 - `short`:矮的 - `long`...