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

关于Java异常处理的9条原则

关于Java异常处理的9条原则在Java编程中,合理有效地处理异常对于保证程序的稳定性和可维护性至关重要充分发挥异常优点,可以提高程序可读、可靠、可维护性本文基于Effective Java 异常章节总结...:程序运行错误时抛出的异常(比如空指针NullPointerException、非法参数等)错误 Error:运行时虚拟机出现的错误(比如OOM等)处理受检异常时可以捕获或抛出进行处理,如果希望“恢复”...API设计时遵循:对于可以恢复的情况抛出受检异常、对于程序错误抛出运行时异常、不确定能不能恢复抛出未受检异常 (未受检异常可以看成运行时异常)如果在最外层(离用户最近)返回用户能理解的错误信息避免不必要的使用受检异常受检异常需要手动进行处理...(类似第二种) 比如TreeSet需要内部元素实现比较器,如果未实现比较器或者元素类型不同,会发生类型转换异常,从而抛出异常不会执行添加操作将源对象进行拷贝,如果发生异常错误可以找回源对象(或直接使用拷贝的对象进行处理...,不要使用异常来做程序的流程控制广泛的异常分为受检异常、运行时异常(非受检异常)和错误,通常只接触前两者,后者排查虚拟机错误时才接触对于运行恢复的情况抛出受检异常,程序错误或不确定是否允许恢复的情况抛出运行时异常受检异常必须进行处理

33431

Python -- 异常处理

【简 介 异 常】  异 常 是 什 么  异常是一个事件,该事件在执行过程中发生,影响了程序正常执行。异常是python对象,表示一个错误。而我们要做的事发生异常后捕获并处理它,否则程序会终止。...,异常呗递交到上层try,或者程序最上层,然后结束程序,打印缺省值 3、try 子语句没有发生异常,python将执行else语句后的语句,然后通过整个try语句 【五 类 异 常 】 使用except...变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。 元组通常包含错误字符串,错误数字,错误位置。 #!...:  //为了能捕获异常,"except"语句必须有用相同的异常来抛出类对象或者字符串     print 1 else:     print 2 >>>> python test.py   //输出如下..., 0)  自 定 义 异 常  创建一个新异类,程序命名他们自己的异常,异常应是典型的集成Exception类; 以下为与RuntimeError相关实例,实例中创建了基类RuntimeError

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

    异常要怎么抛?

    这个我相信大家都很熟悉了,我随便说几个: 200,成功 400,错误的请求 401,未认证 403,未授权 500,服务器内部错误 503,网关错误 嗯,知道这么几个就差不多了,其中,401和403,一个表示未认证...我们主要来看400和500这两个状态码,400表示错误的请求,500表示内部服务器错误,他们有什么本质的区别么?...其实,对于业务开发者,真正能使用到的就应该是只有对于客户端错误的检查自己手动抛出异常,其他的异常一律不需要关心,比如空指针异常,远程调用异常,数据库异常,你要相信,这些异常都会在框架层处理的很好。...,即使这样,你也应该保证你的try catch范围足够小,只包住那一个方法调用即可,并且,在catch中包装成你自己的运行时异常继续往外抛。...正常来说,很多大公司都会监控http返回码,如果是500是要告警的,发邮件发短信,半夜把程序员(你)叫起来去改问题的,有可能还会通报批评,很严重的!

    1.4K30

    【C++高阶】深入理解C++异常处理机制:从try到catch的全面解析

    如系统的很多库的接口函数都是通 过把错误码放到errno中,表示错误 实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的 错误 C++异常概念 异常是一种处理错误的方式...catch: 在您想要处理问题的地方,通过异常处理程序捕获异常.catch 关键字用于捕获异 常,可以有多个catch进行捕获 try: try 块中的代码标识将被激活的特定异常,它后面通常跟着一个或多个...所以实际中我们最后都要加一个catch(…)捕获任意类型的异 常,否则当有异常没捕获,程序就会直接终止 找到匹配的catch子句并处理以后,会继续沿着catch子句后面继续执行 代码示例 (C++):...若无异常接口声明,则此函数可以抛掷任何类型的异常 代码示例 (C++): // 这里表示这个函数会抛出A/B/C/D中的某种类型的异常 void fun() throw(A,B,C,D); // 这里表示这个函数只会抛出...这三个关键字来构建异常处理的框架,理解了异常如何在程序中传播,并掌握了如何通过捕获和处理异常来避免程序崩溃和数据丢失的风险。

    1K10

    【Java 基础篇】Java线程异常处理详解

    在多线程编程中,异常处理是一个至关重要的方面,它决定了你的多线程应用程序的稳定性和可靠性。...在本篇博客中,我们将深入探讨Java中的线程异常处理,包括线程抛出的异常类型、如何捕获和处理异常以及最佳实践。 异常类型 在多线程应用中,线程可能会抛出不同类型的异常。...Error 错误是更严重的问题,通常无法处理。例如,OutOfMemoryError 表示内存不足,通常无法通过捕获异常来解决。 4....记录异常 无论你选择哪种处理方式,都应该记录异常信息,以便后续排查问题。可以使用日志库将异常信息记录到日志文件中。 2. 避免忽略异常 不要忽略异常,除非你有充分的理由。...忽略异常可能导致程序出现难以调试的问题,应尽量捕获和处理异常。 3. 使用finally块 如果你在try-catch块中捕获了异常,应该使用finally块来确保资源的释放或清理工作。

    46410

    Java Review(三十二、异常处理)

    需要注意的是,所有的异常都是由 Throwable 继承而来,但在下一层立即分解为两个分支:Error 和 Exception: Error 类层次结构描述了 Java 运行时系统的内部错误和资源耗尽错误...应用程序不应该抛出这种类型的对象。 如果出现了这样的内部错误, 除了通告给用户,并尽力使程序安全地终止之外, 再也无能为力了。这种情况很少出现。...这样也满足了异常处理机制的其中一个目标,将正常处理与错误处理分开。 3、利用异常层次结构 不要只抛出 RuntimeException 异常。应该寻找更加适当的子类或创建自己的异常类。...如果认为异常非常重要,就应该对它们进行处理。 5、在检测错误时,“ 苛刻 ” 要比放任更好 当检测到错误的时候, 有些程序员担心抛出异常。...6、不要羞于传递异常 很多程序员都感觉应该捕获抛出的全部异常。

    78710

    JavaSE 基础学习之四 —— 异常处理

    ,这时便可以通过抛出自定义异常来结束。...自定义异常可以抛出我们自己想要抛出的信息,可以通过抛出的信息区分异常发生的位置,根据异常名我们就可以知道哪里有异常,根据异常提示信息进行程序修改。...Data: ” + data.toString()); 在程序中,选择使用异常处理还是错误返回码处理,应该根据是否有利于程序结构来确定,且不能将异常和错误码混合使用。...如果确实有很多异常类型,首先应该考虑用异常来进行区别。...类型的底层方法需要对输入参数进行判断,如果参数不合法,应该主动抛出 RuntimeException; 强烈建议: 在调用的最高层,必须处理所有的异常; 如果捕获了异常,然后抛出新的异常,则必须将原异常的信息全部包含在新的异常中

    42020

    Java异常处理机制

    2、throw、throws关键字     throw关键字是用于方法体内部,用来抛出一个Throwable类型的异常。如果抛出了检查异常,则还应该在方法头部声明方法可能抛出的异常类型。...当方法的调用者无力处理该异常的时候,应该继续抛出,而不是囫囵吞枣一般在catch块中打印一下堆栈信息做个勉强处理。...笔者认为,异常的处理存在着一套哲学思想:对于一个应用系统来说,系统所发生的任何异常或者错误对操作用户来说都是系统"运行时"异 常,都是这个应用系统内部的异常。...五、 设计一个高效合理的异常处理框架       对于一个应用系统来说,发生所有异常在用户看来都是应用系统内部的异常。因此应该设计一套应用系统的异常框架,以处理系统运行过程中的所有异常。       ...六、 Java异常处理总结       回顾全文,总结一下Java异常处理的要点:       1、 异常是程序运行过程过程出现的错误,在Java中用类来描述,用对象来表示具体的异常。

    1.4K30

    C++异常

    比如除0时,我们不好设置这个返回数,因为并不知道返回的是结果还是错误码。 (2)需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通 过把错误码放到errno中,表示错误。...实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的 错误。 二....catch子句的过程称为栈展开。所以实际中我们最后都要加一个catch(...)捕获任意类型的异 常,否则当有异常没捕获,程序就会直接终止。...// 这里表示这个函数会抛出A/B/C/D中的某种类型的异常 void fun() throw(A,B,C,D); // 这里表示这个函数只会抛出bad_alloc的异常 void* operator...总结: 异常总体而言,利大于弊,所以工程中我们还是鼓励使用异常的。 总结 好了,到这里今天的知识就讲完了,大家有错误一点要在评论指出,我怕我一人搁这瞎bb,没人告诉我错误就寄了。

    8710

    札记:Java异常处理

    大致来说,这些意外情况分三类: 交互输入 用户以非预期的方式使用程序,比如非法输入,不正当的操作顺序,输入文件错误等。...异常发生后,有的情况是需要从错误的状态中恢复再继续执行,又或者是保存状态然后终止执行等。 有关异常的发现和预防是一个具体问题具体对待的经验之谈。对于异常处理框架,关键包括异常的表示、传递和捕获。...一般来说,自己的程序应该将代码逻辑错误使用RuntimeException去表示,而涉及到输入、环境等不可控的必然因素使用已检查异常来表示。...catch中再次抛出异常 catch块中的代码有可能再次抛出异常,所以有时需要在catch块内部使用try/catch结构。另一些情况下,我们需要主动在catch块在抛出异常。...自己的异常类型中可以增加额外的信息,如对异常来源的统一描述等,但框架内部方法没必要舍弃合适的系统类型去增加重复概念。 参考资料 Java核心技术 卷1 基础知识 原书第9版

    1.3K80

    优雅的处理你的Java异常

    由于某种原因,我们的程序无法保存到数据库. 一些程序员错误的开发了代码,导致保存过程中出现异常,比如NPE....在service响应一个状态码机制,比如1 2 3表示错误信息,0 表示没有任何错误....代码错误,这类异常用于描述开发的代码错误,例如NPE,ILLARG,都属于程序员制造的BUG. 专有异常,多用于特定业务场景,用于描述指定作业出现意外情况无法预先处理....换言之,没有这样的主机是异常,没有这样的用户不是异常了么? 所以一定要弄明白什么是用异常来控制逻辑,什么是定义程序异常....上述代码最大的问题在于,我们如何利用异常来自动处理事务呢? 然而这和我们的异常中断service没有什么冲突.也并不是一回事. 我们提倡在 业务处理 的时候,如果发现无法处理直接抛出异常即可.

    51530

    java 异常分类和处理机制

    Error是系统内部的错误,由jvm抛出,交给系统来处理。 Exception(异常) 是程序正常运行中,可以预料的意外情况。比如数据库连接中断,空指针,数组下标越界。...所以,java语言处理运行时错误有三种方式, 一是程序不能处理的错误, 二是程序应该避免而可以不去捕获的运行时异常, 三是必须捕获的非运行时异常。...我来举例说明一下这个问题,先从受检异常说起,比如说有这样一个业务逻辑,需要从某文件中读取某个数据,这个读取操作可能是由于文件被删除等其他问题导致无法获取从而出现读取错误,那么就要从redis或mysql...的子类),调用者不用显示的进行try…catch…操作进行强制处理.这就要求调用者在调用这样的方法时先进行验证,避免发生RuntimeException.如下: 4.4 应该选用哪种异常 通过以上的描述和举例...第二种异常是指在service中抛出什么样的异常就自定义一个指定的异常错误,然后在进行抛出异常。 一般来讲,如果系统没有别的特殊需求的时候,在开发设计中,建议使用第二种方式。

    99231

    原 GetHashCode重写指南(译文)

    而且, 每个对象都应该有一个 ToString, 以便它能够打印出一个字符串的表示形式, 以便进行调试。这也是合理的, 对象应该能够比较自己与其他对象的平等(equal)。...对象可能会超出你预料的放进hash表中,许多linq操作内部都是使用的hash表,在linq操作中不要做危险的可能会导致hash值改变的操作。...我偶尔也会回应“我想把我在GetHashCode中抛出notimplementedexception以确保对象从未投入一个哈希表;我不打算为这个对象会被放入一个哈希表。“类似于这种问题。...十多年前, 我为 msn.com 后端服务器使用的表编写了一个字符串哈希算法。我认为这是一个合理的随机分布的算法, 但我犯了一个错误, 它不是。...在同一个代码中的线程 bug 之间, 我破坏了 msn.com 上一个重要页面的性能;这既费钱又尴尬。数据有时是大量相似的, 一个好的哈希算法将考虑到这一点。 特别要小心“异或”。

    1.1K60

    python中认识异常,合理利用异常

    我们应该把自定义的迭代器赋值给一个变量,然后再使用next函数对这个变量进行下一次迭代。...手动抛出异常使用:raise Exception,这里的Exception是一个异常类,类的话我就可以使用构造方法进行初始值的传入。也就是说传入的是异常的描述。...2.我们可以利用异常来进行数据类型的判断。...四、重要的内建类异常 Exception所有异常的基类 AttributeError属性引用或属性失败时抛出的异常 OSError当操作系统无法执行任务时抛出的异常 IndexError在使用序列中不存在的索引时抛出的异常...KeyError在使用映射中不存在的键值时抛出的异常 NameError找不到名字(变量)时抛出的异常 SyntaxError在代码为错误形式时触发 TypeError在内建操作或函数应用于错误类型的对象时抛出的异常

    69910

    一文看懂 .NET 的异常处理机制、原则以及最佳实践

    快速了解 .NET 的异常机制 Exception 类 我们大多数小伙伴可能更多的使用 Exception 的类型、Message 属性、StackTrace 以及内部异常来定位问题,但其实 Exception...也再没有任何代码能够使得程序从错误中恢复了) 不过也可以配置 legacyUnhandledExceptionPolicy 防止后台线程抛出的异常让程序崩溃退出 建议在这个事件中记录崩溃日志,然后对应用程序进行最后的拯救恢复操作...如果你经常在正常的操作中发现可以通过此事件监听到第一次机会异常,那么一定是应用程序或框架中的异常设计出了问题(可能把正常应该处理的流程当作了异常,可能内部实现代码错误,可能出现了使用错误),这种情况一定是要改代码修...表示类型初始化的时候发生了错误 .NET 设计失误 FormatException 因为当它抛出来时无法准确描述到底什么错了 首先是你自己不应该抛出这样的异常。...使用错误: ArgumentException 表示参数使用错了 ArgumentNullException 表示参数不应该传入 null ArgumentOutOfRangeException 表示参数中的序号超出了范围

    87941

    【C++】异常,你了解了吗?

    如系统的很多库的接口函数都是通 过把错误码放到errno中,表示错误实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错误。...catch: 在您想要处理问题的地方,通过异常处理程序捕获异常.catch 关键字用于捕获异 常,可以有多个catch进行捕获。...异常是通过抛出对象而引发的,该对象的类型决定了应该激活哪个catch的处理代码。...当除数为0时,抛出异常,他会先找当前作用域的catch,如果没有,就会返回调用链中调用它的上一个中去找catch,如果没有catch,就会直接报错,终止程序。...所以实际中我们最后都要加一个catch(...)捕获任意类型的异 常,否则当有异常没捕获,程序就会直接终止。

    54020

    byteTCC框架--关于接口返回问题的讨论

    这里记录下交流的这个过程,没有格式的是我提问的,有引用格式的是作者的回答: 对话 当调用失败后,我想拿到这个错误堆栈信息,怎么获取呢?我想把错误信息拿到存日志或者是返回 ?...错误一般都是用异常来表示啊,用字符串表示很少见。...这是ByteTCC在rollback过程中也碰到异常了,抛出的是SystemException 说错了,是在commit过程中 HTTP接口一般返回500码就能标识错误了,当然,如果你想在应用层面设置自己的业务异常码...当然,也并不是说你在controller中抛出异常就只能显示那个500了,你可以考虑在框架层面对其进行处理,构建自己业务系统的业务异常码,只要在全局事务之外就可以 还有2个疑问:我A调用B和C服务,...至于页面显示什么,那是consumer收到成功/错误之后自己决定的,而不应该由provider来决定页面来显示什么 provider端接口返回一个“调用成功”、“调用失败”这中信息,是完全没有意义的。

    99430

    Effective Java要点笔记

    (如专门的工厂类) 可根据Type入参来从工厂拿对应多例 多个构造参数,如果灵活多变,要考虑用构造器 工作中如果构造函数有多个 且 特定 的话,我一般倾向写两三个函数签名不一样构造器。...当非静态成员类的实例被创建的是时候,它和外围实例之间的关联关系也随之建立起来&不能被修改 每当编写方法和构造器的时候,应该考虑他它的参数有哪些限制,应该把限制写到文档中,并在方法的开头处加上限制逻辑,私有方法...其它异常使用运行时异常 优先使用jdk里的标准的异常,对于这些常见的可重用的异常会降低API的学习成本 .更高层的实现应该捕获低层的异常, 同时抛出可以按照高层抽象进行解释的异常,叫做异常转译, 这样避免了方法抛出的异常与它所执行的任务没有明显的联系..., 高层的异常提供访问方法(Throwable.getCause)来获取底层的异常 不过我们应该在底层方法调用的时候尽量确保它们会执行成功,从而避免它们抛出异常,比如通过严格的检查高层传递到底层的参数。...次选方案是,让高层悄悄的绕开异常, 将高层方法的调用者与底层问题隔离起来。(底层catch异常打错误日志) 一般而言,失败的方法调用应该使对象保持在被调用之前的状态 异常要打印关键信息,禁止忽略异常

    44210

    有点优雅的处理你的 Java 异常

    由于某种原因,我们的程序无法保存到数据库. 一些程序员错误的开发了代码,导致保存过程中出现异常,比如NPE....在service响应一个状态码机制,比如1 2 3表示错误信息,0 表示没有任何错误....代码错误,这类异常用于描述开发的代码错误,例如NPE,ILLARG,都属于程序员制造的BUG. 专有异常,多用于特定业务场景,用于描述指定作业出现意外情况无法预先处理....换言之,没有这样的主机是异常,没有这样的用户不是异常了么? 所以一定要弄明白什么是用异常来控制逻辑,什么是定义程序异常....上述代码最大的问题在于,我们如何利用异常来自动处理事务呢? 然而这和我们的异常中断service没有什么冲突.也并不是一回事. 我们提倡在 业务处理 的时候,如果发现无法处理直接抛出异常即可.

    62510

    Java自定义异常(优雅的处理异常)

    大家好,又见面了,我是你们的朋友全栈君。...是所有Java程序中错误处理的父类 ,有两种子类:Error和Exception。...:表示由JVM所侦测到的无法预期的错误,由于这是属于JVM层次的严重错误 ,导致JVM无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。...Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出).假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。...如果是主程序抛出的异常,那么这整个程序也就退出了。 运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。

    3K41
    领券