Java基础[7]异常,断言,日志
2017-07-31 23:15
555 查看
异常
1
异常类的层次结构使用总结:2 补充
常见RuntimeException有,错误类型转换,数组访问越界,访问null指针。使用包装技术,不丢失原始异常细节。当需要把捕获的原始异常设置为新的异常时,使用包装技术不会丢失原始异常细节。 .initCause(e)将原始异常进行包装;.getCause()获取原始异常类型。(底层框架对原始异常捕获,进行包装抛出新的异常。你不能更改框架,当需要获取原始异常时,getCause()就很有用)
/** * 包装异常,获取原始异常示例 * @author gao tianci * @version $Id: TestException.java, v 0.1 2017年7月18日 下午9:58:43 gao tianci Exp $ */ public class TestException { @Test public void test() { try { throwIllegealOne(); } catch (IllegalArgumentException e) { System.out.println("------(initCause())------"); System.out.println(e.getMessage()); System.out.println(e.getCause() instanceof SQLException); } try { throwIllegealTwo(); } catch (IllegalArgumentException e) { System.out.println("-----------(e)-----------"); System.out.println(e.getMessage()); System.out.println(e.getCause() instanceof SQLException); } try { throwIllegealThree(); } catch (IllegalArgumentException e) { System.out.println("---------(msg+e)---------"); System.out.println(e.getMessage()); System.out.println(e.getCause() instanceof SQLException); } } //SQLException public static void throwSQL() throws SQLException { throw new SQLException("sql error."); } //initCause() public static void throwIllegealOne() throws IllegalArgumentException { try { throwSQL(); } catch (SQLException e) { IllegalArgumentException illegal = new IllegalArgumentException("参数非法"); illegal.initCause(e); throw illegal; } } //e public static void throwIllegealTwo() throws IllegalArgumentException { try { throwSQL(); } catch (SQLException e) { throw new IllegalArgumentException(e); } } //msg + e public static void throwIllegealThree() throws IllegalArgumentException { try { throwSQL(); } catch (SQLException e) { throw new IllegalArgumentException("参数非法" + e); } } }
测试结果:
------(initCause())------ 参数非法 true -----------(e)----------- java.sql.SQLException: sql error. true ---------(msg+e)--------- 参数非法java.sql.SQLException: sql error. false
分析堆栈轨迹
堆栈轨迹是一个方法调用过程的列表。可借助Throwable类的printStackTrace()或getStackTrace()方法进行分析。静态的Thread.getAllStackTrace()方法,它可以产生所有线程的堆栈轨迹。
踩过的坑
一个方法的内部开启了多线程处理,多线程里出现了异常,你在方法出口处肯定捕捉不到!因为他们不是一个线程了!!!
断言
断言,断言机制允许在测试期间向代码插入一些检查语句,当代吗发布时,这些插入的检查语句会被自动地移走。两种形式:assert 条件;assert 条件:表达式;
都会对条件进行检测,第一种情况,条件为false,抛出AssertionError异常,第二种,把表达式传给AssertionError的构造器。
默认情况下,断言禁用,可以开启包级别的断言;也可开启系统级别的断言。
工作中尚未见到使用很多断言,自测的时候可以辅助使用一些。
日志
java自带的日志包在 java.util.logging.*中。使用开源的日志组件会更友好,强烈推荐slf4j,代码简洁,格式化方便。eg:
logger.info("Processing trade with id: {} and symbol : {} ", id, symbol);
此外常用的还有,log4j;logback等组件。
相关文章推荐
- JAVA基础【7.1】《Java核心技术1》异常、断言、日志和调试-异常
- JAVA基础【7.2】《Java核心技术1》异常、断言、日志和调试-断言
- 五、JAVA基础--异常、断言、日志
- Java基础知识五:异常、断言、日志和调试
- JAVA基础【7.3】《Java核心技术1》异常、断言、日志和调试-日志
- JAVA基础【7.4】《Java核心技术1》异常、断言、日志和调试-调试
- [JAVA基础]异常、断言、日志和调试
- Java基础语法<十一> 异常 断言 日志 调试
- Java学习笔记——异常、断言和日志
- Java中的异常、断言、日志【草稿上】
- Java复习笔记---异常,断言,日志和调试
- 6.Java中的异常、断言、日志【草稿中】
- Java复习笔记(8)——异常、断言、日志和调试
- Java中的异常、断言、日志【草稿中】
- 7.Java中的异常、断言、日志【草稿下,Log4j专题】
- 2015 7 6 Java核心技术卷一 第11章 异常 断言 日志和调试
- Java异常、断言、日志与调试
- Java中的异常、断言、日志【草稿下,Log4j专题】
- .Java中的异常、断言、日志【草稿下,Log4j专题】
- Java基础知识IO流(异常的日志信息&系统信息)