首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计异常解决方案的几点注意事项

× 避免异常消息中使用问号和感叹号。 或许我们习惯于使用感叹号来”警示”某些操作有问题,扪心自问,我们使用的代码返回一个感叹号,自己会有什么感觉。...如果用catch语句块捕获了某个特定类型的异常,并完全理解catch块之后继续执行对应用程序意味着什么,那么我们说这种情况是对异常进行了处理。...× 不要在为了转移异常而编写的catch代码块把任何特殊的异常排除在外。 √ 考虑捕获特定类型的异常,如果理解异常产生的原因,并能对错误做适当的反应。...开发、测试阶段应当把所有bug暴露出来。 √ 要在进行清理工作时使用try-finally,避免使用try-catch。...另外要注意,多线程访问一个对象时会有危险性。 7.2 Try-Parse 模式 与Tester-Doer 模式相比,Try-Parse 模式甚至更快,应在那些对性能要求极高的API中使用。

75290

编程体系结构(02):Java异常体系

一、异常简介 优秀的程序代码,都在追求高效,安全,和低错误率,但是程序异常是无法避免的,降低异常出现的频率是关键,异常出现如何处理是另一个重要方面,Java体系异常框架对于系统开发是十分重要的。...二、API体系 Java的API已经定义许多异常类,分为两大类,错误Error和异常Exception,Throwable作为所有异常的超类,如图: ?...需要特别说明的一点,Spring框架,事务触发多数是以是否抛出异常为标识来处理的,如果方法事务控制内,方法内异常捕获但是最终没有抛出,那该事务则无效。...2、捕获异常 通常捕获异常会使用try-catch-finally关键字三连操作: Try尝试捕获异常: 如果语句依次执行结束,则跳过catch存在finally代码块时,则执行否则执行后续流程;...catch块,必须跟finally块,处理资源释放; Finally无论是否捕获异常,finally代码会被执行,也是面试中常见的异常问题之一,例如在finally代码块return,或者修改返回值等

62210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    前端异常捕获与处理

    try { // 可能会导致错误的代码 } catch (error) { // 错误发生时怎么处理 } 如果 try的任何代码发生了错误,就会立即退出代码执行过程,然后执行 catch...finally 子句 try-catch 语句中是可选的,但是 finally 子句一经使用,其代码无论如何都会执行。...(思考一下如果 catch 块和 finally 块都抛出异常catch 块的异常是否能抛出) 但令人遗憾的是,try-catch 无法处理异步代码和一些其他场景。...); } 并不是捕获到错误就结束了,捕获到错误,我们需要思考当错误发生时: 错误是否是致命的,会不会导致其它连带错误 后续的代码逻辑还能不能继续执行,用户还能不能继续操作 是不是需要将错误信息反馈给用户...5.3 Promise 异常 Promise 异常不能被 try-catch 和 window.onerror 捕获,这时候我们就需要监听 unhandledrejection 来帮我们捕获这部分错误

    3.4K30

    处理Java异常的9个最佳实践

    Java异常处理不是一个简单的主题。初学者发现它很难理解,甚至有经验的开发者也可以花几个小时讨论如何以及应该抛出或处理哪些异常。 这就是为什么大多数开发团队都有自己的一套如何使用它们的规则。...这可以成功执行try块之后或在catch处理异常之后发生。因此,你可以确保清理所有已打开的资源。...当你try子句中打开资源时,它将在try块执行自动关闭,或者处理异常。...始终优先捕获最具体的异常类,并将不太具体的catch块添加到列表的末尾。 你可以以下代码段中看到此类try-catch语句的示例。...如最佳实践#4所述,异常消息应描述异常事件。堆栈跟踪告诉你抛出异常的类,方法和行。 如果需要添加其他信息,则应捕获异常并将其包装在自定义异常。但请务必遵循最佳做法9。

    76850

    Java面试集锦(一)之Java异常

    try-catch:我们代码中使用try-catch块进行异常处理。try是块的开始,catchtry块的末尾处理异常。我们可以使用try有多个catch块,try-catch块也可以嵌套。...Checked Exceptions是我们可以程序预期并尝试从中恢复的特殊情况,例如FileNotFoundException。我们应该捕获异常并向用户提供有用的消息并正确记录以进行调试。...String getMessage() - 此方法返回消息String of Throwable,并且可以通过构造函数创建异常时提供消息。...第一部分解释了从main方法抛出异常,第二部分打印异常类名,然后冒号打印异常消息。 图片 10....程序尽早抛出异常(Fail-Fast)。 程序后期捕获异常,让调用者处理异常。 使用Java 7 ARM功能确保资源已关闭或使用finally块正确关闭它们。 始终记录异常消息以进行调试。

    1K40

    框架设计原则和规范(三)

    考虑为抽象的具体实现提供参考测试。这类测试应该能告诉用户,他们是否正确的实现了契约。...避免应用程序的代码捕获具体类型不确定的异常时,把错误吞了 2.2.9.3....考虑捕获特定类型的异常——如果确实理解该异常在具体环境中产生的原因,并能对错误做出适当的反应 应该只有在你知道自己能从一个异常完全恢复时,才捕获异常。...执行一些操作时,你可能知道产生异常的原因,但却不知道如何从中恢复,在这种情况下不要捕获异常。 2.2.9.5. 不要捕获不应该捕获异常。通常应该允许异常沿着调用栈向上游传递。...封装异常 要确保错误消息中使用的术语能够为用户理解。而很多异常都是从底层抛出的,并为高层所捕获

    99260

    Java异常面试问题

    String getMessage() - 此方法返回消息String of Throwable,并且可以通过构造函数创建异常时提供消息。...如果你一个try捕获了很多异常,你会发现catch块代码看起来非常难看,并且主要由冗余代码组成,以记录错误,记住Java 7的一个特性是multi-catch块。...我们可以一个catch捕获多个异常。...第一部分解释了从main方法抛出异常,第二部分打印异常类名,然后冒号打印异常消息。 11. Java的final,finally和finalize有什么区别?...程序尽早抛出异常(Fail-Fast)。 程序后期捕获异常,让调用者处理异常。 使用Java 7 ARM功能确保资源已关闭或使用finally块正确关闭它们。 始终记录异常消息以进行调试。

    1K30

    干货分享|Java异常经典14问,你都能答对吗?

    如果你一个try捕获了很多异常,你会发现catch块代码看起来非常难看,并且主要由冗余代码组成,以记录错误,记住Java 7的一个特性是multi-catch块。...我们可以一个catch捕获多个异常。...第一部分解释了从main方法抛出异常,第二部分打印异常类名,然后冒号打印异常消息。 11、Java的final,finally和finalize有什么区别?...14、提供一些Java异常处理最佳实践? 与Java异常处理相关的一些最佳实践是: 使用特定异常以便于调试。 程序尽早抛出异常(Fail-Fast)。 程序后期捕获异常,让调用者处理异常。...始终记录异常消息以进行调试。 使用multi-catch块清洁关闭。 使用自定义异常从应用程序API抛出单一类型的异常。 遵循命名约定,始终以Exception结束。

    90120

    Java如何处理大量try-catch块的最佳实践

    欢迎关注,有任何问题可发送私信~ Java开发,我们常常遇到需要处理各种异常的情况。 如果程序包含许多方法,每个方法都可能会抛出异常,这可能导致大量的try-catch块。...以下是一个关于如何处理大量try-catch块的最佳实践的讨论: 使用更高级的异常处理机制 自定义错误消息:当异常发生时,提供有关发生了什么的详细信息。这将帮助你更快地调试问题。...日志记录:记录所有异常,并保存详细信息。这对于系统运行时找出问题很有用。 使用断言:如果你的代码某些事情不应该发生(例如,一个函数应该总是返回一个非空数组),则使用断言来校验这种情况。...避免finally块处理异常 finally块处理异常可能会导致代码难以阅读和维护。一般来说,你应该只try处理异常,无论是否会出现异常,代码都应该能够执行特定的操作(例如关闭资源)。...重构和自动化测试 处理了大量的try-catch块之后,花时间重新检查和重构你的代码可能是值得的。同时,确保你有足够的自动化测试来覆盖你的代码路径,这样你可以更容易地发现和修复问题。 8.

    37810

    9种处理Java异常的最佳实践

    成功执行try块之后或在catch处理了异常之后,就会发生这种情况。因此,可以确保清除所有打开的资源。...当您在try子句中打开资源时,将在try块执行或处理异常自动关闭资源。...始终首先捕获最具体的异常类,并将不那么具体的捕获块添加到列表的末尾。 您可以以下代码片段中看到这样的try-catch语句的示例。...如最佳做法4所述,异常消息应描述异常事件。堆栈跟踪会告诉您在哪个类,方法和行引发了异常。 如果需要添加其他信息,则应捕获异常并将其包装在自定义异常。但是请确保遵循最佳实践9。...「9.不消耗异常的情况下包装异常」 有时最好捕获一个标准异常并将其包装到自定义异常。这种例外的典型示例是特定于应用程序或框架的业务例外。这使您可以添加其他信息,还可以对异常类实施特殊处理。

    46110

    Java 异常面试问题与解答

    String getMessage() –此方法返回 Throwable 消息字符串,并且可以通过其构造函数创建异常时提供该消息。...如果您在单个 try捕获了很多异常,则您会注意到 catch 块代码看起来非常丑陋,并且主要由用于记录错误的冗余代码组成,请记住,Java 7 的功能之一就是多捕获块我们可以单个 catch捕获多个异常...第一部分说明从 main 方法抛出异常,第二部分打印异常类名称,然后冒号打印异常消息。 11.Java的 final,finally 和 finalize 有什么区别?...始终记录异常消息以进行调试。 使用多捕获块让代码更加清洁。 使用自定义异常可以从应用程序 API 引发单一类型的异常。 遵循命名约定,始终以 Exception 结尾。...您将收到错误消息 “ JAXBException 无法访问的捕获块。不会从 try 语句主体引发此异常。 要解决此问题,您将必须删除 JAXBException 的 catch 块。

    92420

    Java 处理异常 9 个最佳实践,你知道几个?

    记录你所指定的异常 4. 使用描述性消息抛出异常 5. 最先捕获特定异常 6. 不要在catch中使用Throwable 7. 不要忽略Exceptions 8. 不要记录和抛出一个异常 9....使用Finally 相比于try,无论是成功执行try里的代码,或是catch处理了一个异常,Finally里的内容是一定会被执行的。因此,可以确保清理所有已打开的资源。...当你try子句中打开资源时,它将在try被执行自动关闭,或者处理一个异常。...所以要首先捕获特定异常类,并在末尾添加一些处理不是很具体异常catch语句。 你可以在下面的代码片段中看到这样一个try-catch语句的示例。...正如在上述第4个中所解释的那样,异常消息应该描述异常事件。堆栈会告诉你在哪个类、方法和行异常被抛出。 如果你需要添加额外的信息,应该捕获异常并将其包装在一个自定义的信息

    40430

    Java 处理异常 9 个最佳实践,你知道几个?

    记录你所指定的异常 4. 使用描述性消息抛出异常 5. 最先捕获特定异常 6. 不要在catch中使用Throwable 7. 不要忽略Exceptions 8. 不要记录和抛出一个异常 9....使用Finally 相比于try,无论是成功执行try里的代码,或是catch处理了一个异常,Finally里的内容是一定会被执行的。因此,可以确保清理所有已打开的资源。...当你try子句中打开资源时,它将在try被执行自动关闭,或者处理一个异常。...所以要首先捕获特定异常类,并在末尾添加一些处理不是很具体异常catch语句。 你可以在下面的代码片段中看到这样一个try-catch语句的示例。...正如在上述第4个中所解释的那样,异常消息应该描述异常事件。堆栈会告诉你在哪个类、方法和行异常被抛出。 如果你需要添加额外的信息,应该捕获异常并将其包装在一个自定义的信息

    37330

    Java 处理异常的 9 个实践

    使用 finally 相比于 try,无论是成功执行 try 里的代码,或是 catch 处理了一个异常,finally 里的内容是一定会被执行的。因此,可以确保清理所有已打开的资源。...当你 try 子句中打开资源时,它将在 try 被执行自动关闭,或者处理一个异常。...所以要首先捕获特定异常类,并在末尾添加一些处理不是很具体异常catch 语句。 你可以在下面的代码片段中看到这样一个 try-catch 语句的示例。...正如在上述第4个中所解释的那样,异常消息应该描述异常事件。堆栈会告诉你在哪个类、方法和行异常被抛出。 如果你需要添加额外的信息,应该捕获异常并将其包装在一个自定义的信息。...", e); }} 因此,只需要捕获一个你想要处理的异常方法中指定它,并让调用者处理它。 9. 包装异常 有时最好捕获一个标准异常并将其封装到一个定制的异常

    50210

    Java异常处理最佳实践

    1.1 使用 finally 代码块 与前面几行 try 代码块不同,finally 代码块总是会被执行。不管 try 代码块成功执行之后还是你 catch 代码块处理完异常都会执行。...当你 try 子句中打开资源,资源会在 try 代码块执行异常处理自动关闭。...Java API 提供了上百种针对不同情况的异常类型,开发首先尽可能使用 Java API 提供的异常,如果标准的异常不能满足你的要求,这时候创建自己的定制异常。...【强制】有try块放到了事务代码catch异常,如果需要回滚事务,一定要注意手动回滚事务。 【强制】finally块必须对资源对象、流对象进行关闭,有异常也要做try-catch。...说明:try的return语句执行成功,并不马上返回,而是继续执行finally块的语句,如果此处存在return语句,则在此直接返回,无情丢弃掉try返回点。

    74150

    10 Java 异常

    已检异常(编程异常) 明确的特定情况下抛出,经常是应用能部分或完全恢复的情况。例如,某段代码要在多个可能的目录寻找配置文件。...异常发生try的剩余语句将不再执行。 catch的代码要执行的条件是,首先在 try 块中发生了异常,其次异常的类型与 catch 要捕捉的一致。...建议声明更为具体的异常,这样处理的可以更具体。当捕获的多个异常类之间存在父子关系时,捕获异常顺序与 catch 代码块的顺序有关。一般先捕获子类,捕获父类,否则子类捕获不到。...如果在finally也有return语句呢?trycatch 内的 return 会丢失,实际会返回finally返回值。...避免使用两种处理异常的反模式 // 不要捕获异常而不处理 try { someMethodThatMightThrow(); } catch(Exception e){ } // 不要捕获,记录日志再重新抛出异常

    80130

    JAVA 异常处理的最佳实践

    因此,这样的异常处理导致方法和调用者之前出现了不当的强耦合。 设计API的最佳实践 讨论了这些之后,我们可以来探讨一下如何设计一个正确抛出异常的良好的API。...4.文档化异常 你可以使用Javadoc的 @throws标记来记录需检查异常和无需检查异常。但是,我倾向于写单元测试来文档化异常。单元测试允许我使用查看异常,并且作为一个可以被执行的文档来使用。...通过为异常编写测试,你不仅能记录异常如何触发,而且使你的代码经过这些测试更加健壮。...这里的重点在于 finally块关闭连接,无论是否出现了异常。 2.永远不要使用异常来控制流 生成栈追踪的代价很昂贵,它的价值在于debug过程中使用。...一个流程控制,栈追踪应当被忽视,因为客户端只想知道如何进行。

    1.7K80

    Java异常面试题(2020最新版)

    finally一般作用在try-catch代码块处理异常的时候,通常我们将一定要执行的代码方法finally代码块,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。...,然后如果在 finally 修改了返回值,就会返回修改的值。...1.1 使用 finally 代码块  与前面几行 try 代码块不同,finally 代码块总是会被执行。不管 try 代码块成功执行之后还是你 catch 代码块处理完异常都会执行。...当你 try 子句中打开资源,资源会在 try 代码块执行异常处理自动关闭。 ...说明:try的return语句执行成功,并不马上返回,而是继续执行finally块的语句,如果此处存在return语句,则在此直接返回,无情丢弃掉try返回点。

    77930

    跨越时空的对白——async&await分析

    对于try...catch...来说,不都是同步执行过程捕获异常的吗,为何在async...await...try...catch...可以捕获异步执行的异常呢?...其可以主函数和异步函数这两个不同时空互相隔离的生物进行消息传递,比如说时空A捕获了时空B里面的异常消息,这样它们就可以相拥❤ 怎么想都觉得这个过程离大谱!...try...catch...不能捕获异步异常 try...catch...能捕获到的仅仅是try模块内执行的同步方法的异常try执行且不需要异步等待),这时候如果有异常,就会将异常抛到catch。...捕获到了,现在我们完全可以确定,Promise异常捕获try...catch...没有什么关系。...[code3.png] code4 至此我们已然通过try...catch...捕获异常测试,那如果采用async...await...的方式呢?

    1.2K21

    【深入浅出C#】章节 6: 异常处理和调试:异常的概念和处理机制

    finally块是可选的,它在try-catch块结束执行,无论是否发生异常都会执行其中的代码。finally块通常用于释放资源或进行一些清理工作,比如关闭文件、数据库连接等。...1.4 finally 块 C# ,finally 块是 try-catch 结构的可选部分,用于包含无论是否发生异常都要执行的代码。...无论 try是否抛出异常,finally 块的代码都会得到执行,确保资源的正确释放和清理。...无论 try是否抛出异常,finally 块的代码都会被执行。...二、捕获和处理异常 2.1 捕获特定类型的异常 C# ,可以使用 catch 块来捕获特定类型的异常,并针对不同类型的异常进行不同的处理。

    1K40
    领券