JAVA异常处理原则和log4j输出详细异常分析
1.多用try,catch;不要一个try,catch包含所有内容
好处:不同模块抓取不同异常,某一模块异常挂了,不影响其他模块的程序的进行
2.多写几个catche;尽量不要使用Exception这个大异常去包容所有异常
不要为了追求代码的简练,try,catch只写一个,使用Exception去抓取所有可能的异常,这只是理想状态,程序出错不是直接打印出来异常就完事了,应该在catche抓取异常的同时一方面给程序员输出错误日志,一方面做些处理反馈给用户,比如一些提示错误框或者错误页面,不能让用户不知道所以然但是系统没有正常进行。
综上所述,应该多使用几个catche块去抓取不同异常,然后做不同处理,返回给用户,尽量不同异常使用不同cacht块抓取别一个Exception抓取所有异常;
3.通过测试来谈谈java常见异常打印的区别
packagecom.hudong.test;
importorg.apache.commons.logging.Log;
importorg.apache.commons.logging.LogFactory;
public class TryCatchTest{
private final static Log logger =LogFactory.getLog(TryCatchTest.class);
public static void main(String[] args) {
try {
System.out.println(1 / 0);
} catch (Exception e) {
logger.error("---fill---:" +e.fillInStackTrace());
logger.error("----------美丽的分割线---------");
logger.error("---msg---:"+ e.getMessage());
logger.error("----------美丽的分割线---------");
logger.error("---e---:" +e.toString());
logger.error("---e===e---:"+ e);
System.out.println("===============");
System.out.println(e.toString());
System.out.println("--------------------");
System.out.println(e.getMessage());
System.out.println("--------------------");
e.printStackTrace();
System.out.println("--------------------");
System.out.println("---fill---:"+e.fillInStackTrace());
System.out.println("===============");
}
try {
System.out.println(1 / 0);
} catch (Exception e) {
try {
throw e;
// throw e.fillInStackTrace();
} catch (Throwable e1) {
e1.printStackTrace();
}
}
}
}
关于java异常的打印网上有很多资料,关于log4j日志的异常输出也有很多资料;但是今天突然想到一个问题:几种异常打印的区别,以及哪种可以打印出详细的异常轨迹 和指定错误行;网上却没找到确切的说法和资料;所以自己写了个测试小程序,通过查资料确认得出以下结论:
1.上面案例的测试只有两种情况可以打印出详细错误堆栈信息:
logger.error("---e===e---:"+ e);
throw e;
第一种是log4j定义的error(message,e)方法实现的打印详细信息;第二种是java自带的抛出详细异常的方式;经过测试只有这两种可以打印出详细的堆栈轨印,其他方式都只输出错误信息。
2. throw e与throwe.fillInStackTrace()的区别
前者输出了详细的错误代码行;后者只输出抛出异常的位置,并未打印出错误代码行的位置,即e.fillInStackTrace()所在地额代码行;所以相对来说,如果想要清楚的抛出错误信息应该使用前者。
3.logger.error("---e===e---:" + e)与logger.error("---fill---:" +e.fillInStackTrace())的区别;
throw、throwe.fillInStackTrace()两个都可以打印出详细异常,与不同的是,log4j前者方式打印的出详细异常并指向错误代码行,而后者不会打印详细堆栈。
4.fillInStackTrace输出信息查看
如果调用e.fillInStackTrace() ,表示重新填充stack里面的信息,那就会丢失低s一级环境的违例对象的信息。如果重新new 一个违例也丢失低一级的违例对象的信息。
JAVA异常处理原则和log4j输出详细异常分析的更多相关文章
- Java异常处理原则与技巧总结
一 处理原则 Java异常代码中我们使用异常的目的是让异常的异常类型来提示“什么”被抛出了--- 即出了什么问题:用异常的栈打印信息来跟踪异常在“哪里”抛出 --- 即哪里出了问题: 异常提示信息来 ...
- Java异常处理——受控(checked)的异常(throws语句)
受控与不受控的异常 1.throws语句中声明的异常称为受控(checked)的异常,通常直接派生自Exception类. 2.RuntimeException(其基类为Exception) 和Err ...
- java异常处理(父子异常的处理)
我当初学java异常处理的时候,对于父子异常的处理,我记得几句话“子类方法只能抛出父类方法所抛出的异常或者是其子异常,子类构造器必须要抛出父类构造器的异常或者其父异常”.那个时候还不知道子类方法为什么 ...
- java异常处理机制
本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则.并且作者提出了自己处理一个大型应用系统 ...
- java异常处理机制 (转载)
java异常处理机制 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C ...
- Java—异常处理总结
异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出 ...
- 深入探索 高效的Java异常处理框架
转载自:http://www.sunwei.org/archives/196 摘要:本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Sprin ...
- Java异常处理机制难点解惑-用代码说话
是否需要看这篇文章? 下面的例子中,如果正常执行返回值多少? 如果出现了ArithmeticException返回值多少? 如果出现非ArithmeticException(如NullPointerE ...
- 根据异常自定义处理逻辑(【附】java异常处理规范)
▄︻┻┳═一『异常捕获系列』Agenda: ▄︻┻┳═一有关于异常捕获点滴,plus我也揭揭java的短 ▄︻┻┳═一根据异常自定义处理逻辑([附]java异常处理规范) ▄︻┻┳═一利用自定义异常来 ...
随机推荐
- 17. docker 网络 host 和 none
1.none network 创建一个 none 网络的 container test1 docker run --name test1 --network none busybox /bin/sh ...
- share团队冲刺9
团队冲刺第九天 昨天:完善代码 今天:修改代码中的问题,提高兼容性 问题:无
- offer(背包问题、DP)
蒜头君很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的.蒜头君没有多少钱,总共只攒了n万元 ...
- UVA 515 差分约束 SPFA判负
第一次看这个题目,完全不知道怎么做,看起来又像是可以建个图进行搜索,但题目条件就给了你几个不等式,这是怎么个做法...之后google了下才知道还有个差分约束这样的东西,能够把不等式化成图,要求某个点 ...
- PAT Advanced 1092 To Buy or Not to Buy (20) [Hash散列]
题目 Eva would like to make a string of beads with her favorite colors so she went to a small shop to ...
- 在mybatis框架中,延迟加载与连表查询的差异
1.引子 mybatis的延迟加载,主要应用于一个实体类中有复杂数据类型的属性,包括一对一和一对多的关系(在xml中用collection.association标签标识).这个种属性往往还对应着另一 ...
- JavaSE--数字签名之校验签名
参考:http://blog.csdn.net/dotuian/article/details/51722300 关于keystore的简单介绍 Keytool是一个Java数据证书的管理工具 ,Ke ...
- 项目在eclipse中正常,在idea中报错
一直用的eclipse,但公司很多员工用的都是idea,便想试试,谁知导入maven项目后一直报错,最后发现编译后target中没有dao中的xml文件,导致监听器加载资源时一直报错, 最后经过反复查 ...
- android蜂巢效果、环形菜单、Kotlin影视应用、简约时钟、查看导出App、支付宝AR扫码效果等源码
Android精选源码 一个蜂巢布局管理器,外观帅气外,动画效果也是很赞 一个基础 UI 框架项目,实现不同布局格式的混排 仿建行app效果,一个环形菜单的布局管理器源码 基于组件化实现的一款用Kot ...
- 2019-2020-1 20199324《Linux内核原理与分析》第九周作业
第八章 进程的切换和系统的一般执行过程 1.进程调度的时机 硬中断和软中断 中断:在本质上都是软件或者硬件发生了某种情形而通知处理器的行为,处理器进而停止正在运行的指令流(当前进程),对这些通知做出相 ...