zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    (二分查找 拓展) leetcode 69. Sqrt(x)
    (二分查找 拓展) leetcode 162. Find Peak Element && lintcode 75. Find Peak Element
    (链表) lintcode 219. Insert Node in Sorted Linked List
    (二分查找 拓展) leetcode 34. Find First and Last Position of Element in Sorted Array && lintcode 61. Search for a Range
    (最短路 Floyd) P2910 [USACO08OPEN]寻宝之路Clear And Present Danger 洛谷
    (字符串 数组 递归 双指针) leetcode 344. Reverse String
    (二叉树 DFS 递归) leetcode 112. Path Sum
    (二叉树 DFS 递归) leetcode 101. Symmetric Tree
    (二叉树 递归) leetcode 144. Binary Tree Preorder Traversal
    (二叉树 递归 DFS) leetcode 100. Same Tree
  • 原文地址:https://www.cnblogs.com/10zhang/p/java-yi-chang-chu-li.html
Copyright © 2011-2022 走看看