• java 异常处理


    1. Throwable 子类 Error 和 Exception   

    Error(错误):

    一般是指java虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误,因此应用程序不应该捕获Error对象,也无须在其throws子句中声明该方法抛出任何Error或其子类。

    Exception:

    Exception类及其子类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件

    (1)SQLException:该异常提供关于数据库访问错误或其他错误的信息。

    (2)RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类

    (3)IOException:此类为异常的通用类,它是由失败的或中断的 I/O 操作生成的。

    运行时异常和非运行时异常

    (1)运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

    (2)非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

    异常处理和设计的几个建议(待验证)

    (1) 检查异常和非检查异常的选择

      一旦你决定抛出异常,你就要决定抛出什么异常。这里面的主要问题就是抛出检查异常还是非检查异常。

      检查异常导致了太多的try…catch代码,可能有很多检查异常对开发人员来说是无法合理地进行处理的,比如SQLException,而开发人员却不得不去进行try…catch,这样就会导致经常出现这样一种情况:逻辑代码只有很少的几行,而进行异常捕获和处理的代码却有很多行。这样不仅导致逻辑代码阅读起来晦涩难懂,而且降低了程序的性能。

      尽量避免检查异常的使用,如果确实该异常情况的出现很普遍,需要提醒调用者注意处理的话,就使用检查异常;否则使用非检查异常。

      因此,在一般情况下,尽量将检查异常转变为非检查异常交给上层处理。

    (2)不要将提供给用户看的信息放在异常信息里

       比较好的方式是将所有错误提示信息放在一个配置文件中统一管理。

    (3)避免多次在日志信息中记录同一个异常

      只在异常最开始发生的地方进行日志信息记录。很多情况下异常都是层层向上跑出的,如果在每次向上抛出的时候,都Log到日志系统中,则会导致无从查找异常发生的根源。

    (4)异常处理尽量放在高层进行

      尽量将异常统一抛给上层调用者,由上层调用者统一之时如何进行处理。如果在每个出现异常的地方都直接进行处理,会导致程序异常处理流程混乱,不利于后期维护和异常错误排查。由上层统一进行处理会使得整个程序的流程清晰易懂。

    原文地址: http://blog.csdn.net/qq_27093465/article/details/52268531

                      http://www.cnblogs.com/dolphin0520/p/3769804.html

  • 相关阅读:
    kubernetes dashboard 二次开发
    grafana二次开发
    Harbor 定制页面 和 二次开发指南
    spring boot 知识点1
    spring boot2.1读取 apollo 配置中心3
    apollo 部门管理
    spring boot2.1读取 apollo 配置中心2
    a 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
    Net上机考试
    Net(ASP.NET)程序设计
  • 原文地址:https://www.cnblogs.com/newlangwen/p/7204398.html
Copyright © 2020-2023  润新知