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输出详细异常分析的更多相关文章

  1. Java异常处理原则与技巧总结

    一  处理原则 Java异常代码中我们使用异常的目的是让异常的异常类型来提示“什么”被抛出了--- 即出了什么问题:用异常的栈打印信息来跟踪异常在“哪里”抛出 --- 即哪里出了问题: 异常提示信息来 ...

  2. Java异常处理——受控(checked)的异常(throws语句)

    受控与不受控的异常 1.throws语句中声明的异常称为受控(checked)的异常,通常直接派生自Exception类. 2.RuntimeException(其基类为Exception) 和Err ...

  3. java异常处理(父子异常的处理)

    我当初学java异常处理的时候,对于父子异常的处理,我记得几句话“子类方法只能抛出父类方法所抛出的异常或者是其子异常,子类构造器必须要抛出父类构造器的异常或者其父异常”.那个时候还不知道子类方法为什么 ...

  4. java异常处理机制

    本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则.并且作者提出了自己处理一个大型应用系统 ...

  5. java异常处理机制 (转载)

    java异常处理机制 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C ...

  6. Java—异常处理总结

    异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出 ...

  7. 深入探索 高效的Java异常处理框架

    转载自:http://www.sunwei.org/archives/196 摘要:本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Sprin ...

  8. Java异常处理机制难点解惑-用代码说话

    是否需要看这篇文章? 下面的例子中,如果正常执行返回值多少? 如果出现了ArithmeticException返回值多少? 如果出现非ArithmeticException(如NullPointerE ...

  9. 根据异常自定义处理逻辑(【附】java异常处理规范)

    ▄︻┻┳═一『异常捕获系列』Agenda: ▄︻┻┳═一有关于异常捕获点滴,plus我也揭揭java的短 ▄︻┻┳═一根据异常自定义处理逻辑([附]java异常处理规范) ▄︻┻┳═一利用自定义异常来 ...

随机推荐

  1. eclipse环境配置,字体大小,代码智能提示,JSP页面默认字符集修改

    安装好JDK后,下载Java EE解压版eclipse 1.字体大小 Windows——>Preferences——>General——>Appearance——>Colors ...

  2. 一图解明Android Studio项目文件结构各部分作用

    初学Android在阅读<第一行代码>的时候整理出来的,如果差错恳请指出,不胜感激. 制图不易,转载请标注出处,谢谢.

  3. EXCEL快速实现下拉计算快捷键

    ctrl + shift + 方向键,,选择要填充的范围,,然后ctrl + d

  4. Istio流量治理原理之负载均衡

    流量治理是一个非常宽泛的话题,例如: ● 动态修改服务间访问的负载均衡策略,比如根据某个请求特征做会话保持: ● 同一个服务有两个版本在线,将一部分流量切到某个版本上: ● 对服务进行保护,例如限制并 ...

  5. Pmw大控件

    Python大控件——Pmw——是合成的控件,以Tkinter控件为基类,是完全在Python内写的.它们可以很方便地增加功能性的应用,而不必写一堆代码.特别是,组合框和内部确认计划的输入字段放在一起 ...

  6. JavaScript mixins

    mixin 是一个类,该类的方法被添加,混合进另外一个类.一个基础类会包含mixin类的方法而不是继承它.这样你就可以使用不同的mixin类来增加或者增强基础类的功能. 这编内容包含怎么样使用java ...

  7. JavaSE--类加载器

    参考:http://www.importnew.com/6581.html Java 编译器会为虚拟机转换源指令.虚拟机代码存储在以 .class 为扩展名的类文件中,每个类文件都包含某个类或者接口的 ...

  8. 5.docker image (镜像)

    1.image 是什么 是文件和 meta data 的集合 (root filesystem) 是分层的,并且每一层都可以添加改变删除文件,成为一个新的image 不同的image可以共享相同的la ...

  9. 数字格式化NumberFormat

    做财务的同学遇到逗号分隔的数值格式,会用到NumberFormat类格式化数据 BigDecimal bigDecimal = new BigDecimal("1000000000.4110 ...

  10. 统计学中比较重要的分布及python中使用方法

    比较重要的四种分布:正态分布.卡方分布.F分布.t分布 卡方分布概率密度曲线 t分布概率密度曲线 F分布概率密度曲线 参考资料: 统计学中四个概率分布 重要抽样分布