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. i春秋2020新春公益赛WP

    Re Factory 主函数fork了一个子进程,父进程添加了一个信号处理器用于比对input,然后死循环挂起.子进程读入input,然后调用了关键函数. 跟进关键函数,发现是从一段内存中读取数据,然 ...

  2. Java if、switch语句,break,case,类型转换、常量、赋值比较、标识符(2)

    if语句: /* if else 结构 简写格式: 变量 = (条件表达式)?表达式1:表达式2: 三元运算符: 好处:可以简化if else代码. 弊端:因为是一个运算符,所以运算完必须要有一个结果 ...

  3. (转)防火墙上的object-group命令实际应用。 (2010-11-11 10:03:53)

    RLooo的博客:http://blog.sina.com.cn/s/blog_59879e3a0100o5w1.html 使用object-group 能大大简化配置工作量,很实用. 防火墙上的配置 ...

  4. 吴裕雄--天生自然 PHP开发学习:表单和用户输入

    <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</t ...

  5. memcached redis 本质区别是功能多少

    功能: 1.memcached 数据类型比较单一,数据淘汰策略单一,功能简单 2.redis 数据类型比较全面, 数据淘汰策略比较多,功能较强 有持久化能力,可以持久存储少量数据(数据量不会大于本机内 ...

  6. 嵌入式Linux环境变量如何参与程序运行

    1.环境变量一共有两份,一份在Flash中,另一份在DDR中.uboot开机时一次性从Flash中读取全部环境变量到DDR中作为环境变量的初始化值,然后使用过程中都是用DDR这一份,用户可以用save ...

  7. 小白学习之pytorch框架(1)-torch.nn.Module+squeeze(unsqueeze)

    我学习pytorch框架不是从框架开始,从代码中看不懂的pytorch代码开始的 可能由于是小白的原因,个人不喜欢一些一下子粘贴老多行代码的博主或者一些弄了一堆概念,导致我更迷惑还增加了畏惧的情绪(个 ...

  8. POJ 2796 Feel Good 【单调栈】

    传送门:http://poj.org/problem?id=2796 题意:给你一串数字,需要你求出(某个子区间乘以这段区间中的最小值)所得到的最大值 例子: 6 3 1 6 4 5 2 当L=3,R ...

  9. 十大经典排序算法(Javascript实现)

    前言 总括: 本文结合动图详细讲述了十大经典排序算法用Javascript实现的过程. 原文博客地址:十大经典排序算法 公众号:「菜鸟学前端」,回复「666」,获取一揽子前端技术书籍 人生有情泪沾衣, ...

  10. PHPCMS 第一节 新增菜单

    一.如何新增菜单 对于新手来说,一开始都有很多疑问,今天我们来开始慢慢分析,就先从这个菜单开始,如何新新增一个我下图框出来的这些呢? 操作如下图 接着就按打开的那个新增页面的提示信息填资料 模块名:就 ...