• java异常处理


    错误处理

    Java的异常

    异常

    Java使用异常Exception来表示错误
    Exception是Class,带有类型信息
    可以在任何地方抛出
    只需要在上层捕获,和方法调用分离
    必须捕获的异常称为Checked Exception
    不需要捕获的异常包括RuntimeException和Error
    捕获异常使用try...catch
    不捕获的Checked Exception必须用throws声明 main()是最后捕获异常的机会

    捕获异常

    捕获异常使用try...catch
    catch会捕获对应的Exception及其子类
    多个catch子句从上到下匹配
    顺序非常重要,子类必须在前
    finally保证有无错误都会执行
    finally可选
    使用multi-catch捕获多种类型异常

    抛出异常

    异常从下往上抛出,直至被捕获
    打印方法调用栈:printStackTrace()
    用throw语句抛出异常
    转换异常时注意保留原始异常信息
    抛出异常前会保证执行finally
    finally如果抛出异常会导致suppressed exception
    获取所有异常信息:getSuppressed()

    自定义异常

    尽量使用JDK已定义异常
    自定义异常从RuntimeException派生
    先定义BaseException,再派生子类
    自定义异常应该提供多个构造方法
    可以使用IDE根据父类快速创建构造方法

    1. 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被捕捉处理,命名为 Checked Exception 是因为Java编译器要进行检查,Java虚拟机也要进行检查,以确保这个规则得到遵守. 
    2. 绿色的异常是运行时异常(runtime exceptions),需要程序员自己分析代码决定是否捕获和处理,比如 空指针,被0除... 
    3. 而声明为Error的,则属于严重错误,如系统崩溃、虚拟机错误、动态链接失败等,这些错误无法恢复或者不可能捕捉,将导致应用程序中断,Error不需要捕捉。

    断言和日志

    使用断言

    断言 Assertion
    断言使用assert语句
    JVM默认关闭断言指令:
    给Java虚拟机传递-ea参数启用断言 可以指定特定的类启用断言 -ea:com.feiyangedu.sample.Main 可以指定特定的包启用断言 -ea:com.feiyangedu...
    特点:
    断言是一种调试方式,断言失败会抛出AssertionError,导致程序退出
    只能在开发和测试阶段启用断言
    对可恢复的错误不能使用断言,而应该抛出异常
    断言很少被使用,更好的方法是编写单元测试

    使用JDK Logging

    日志 Logging

    日志是为了替代System.out.println(),可以定义格式,重定向到文件等 日志可以存档,便于追踪问题 日志记录可以按级别分类,便于打开或关闭某些级别 可以根据配置文件调整日志,无需修改代码

    JDK提供了Logging:java.util.logging JDK Logging定义了7个日志级别:
    SEVERE WARNING
    INFO (默认级别) CONFIG
    FINE
    FINER
    FINEST

    JDK Logging的局限:
    JVM启动时读取配置文件并完成初始化
    JVM启动后无法修改配置
    需要在JVM启动时传递参数 -Djava.util.logging.config.file=config-file-name

    使用Commons Logging

    Commons Logging
    Commons Logging是Apache创建的日志系统:
    Commons Logging是使用最广泛的日志模块
    Commons Logging的API非常简单
    Commons Logging可以自动使用其他日志模块
    Commons Logging定义了6个日志级别:
    FATAL
    ERROR
    WARNING
    INFO (默认级别)
    DEBUG
    TRACE

    屏幕快照 2018-07-21 下午2.40.10

    在Eclipse中引入jar包:
    Project -> Property -> Java Build Path -> Libraries -> Add Jars... 初始化Log对象:

    final Log log = LogFactory.getLog(getClass());
    

    文档:http://commons.apache.org/proper/commons-logging/

    使用Log4j

    Log4j
    Log4j的概念:
    Appender
    Filter
    Layout

    使用Log4j:
    通过Commons Logging实现日志,不需要修改代码即可使用Log4j
    使用Log4j只需要把log4j2.xml和相关jar放入classpath
    如果要更换Log4j,只需要移除log4j2.xml和相关jar
    只有扩展Log4j时,才需要引用Log4j的接口

    文档:http://logging.apache.org/log4j/

  • 相关阅读:
    贪婪算法、递归计算、动态规划背包问题
    递归、动态规划计算斐波那契数列
    用于确定两个字符串最长公共子串的函数
    快速排序算法
    顺序、二分查找文本数据
    MyBatis面试题
    Spring面试题
    SpringMvc面试题
    jsp和servlet面试
    EJB的理解
  • 原文地址:https://www.cnblogs.com/10zhang/p/java-yi-chang-chu-li.html
Copyright © 2020-2023  润新知