package com.cebbank.doa.exception; import org.apache.log4j.Logger; import com.cebbank.doa.util.StringUtil; /** * 关于异常的处理方式 * 异常处理是在做Java开发中必不可少的。但不同的人处理异常的方式也不一样。 * 我处理异常的方式概括为:一切方法都有未知异常,有异常我们就要抛出。 * 其实我们可以写这么几个异常类,代表不同的异常类型,当一个地方出现异常时, * 我们就抛出该类型错误。这样其实是挺不错的。现在这个类没这么做,只是演示 * 下我处理异常的思路。 * * 关于异常我认为: * 虽然在书面上讲异常的分类有'编译期异常'和'运行时异常'等,我对这些理论不是 * 特别熟悉,但我知道比如像IO类操作的时候必须要加try和catch才能编译通过,这 * 些异常就是编译期异常,而像数组下标越界异常空指针异常就属于运行时异常。 * * 在运行时异常里,很多程序员不去处理而是直接抛出。交给虚拟机接管。我觉得这 * 是不靠谱的。当程序发生了这些错误的时候,我不清楚如何让用户得到反馈信息, * 同时程序开发人员维护也是找不到依据。所以在我看来:每一段程序其实有可能发 * 生异常,所以我们都需要去try和catch,如此当出现异常时,我们才能准确定位 * 异常发生的地点和位置。 * * @author lvpeng * @date 2012-11-08 */ public class ExceptionTest { static Logger log = Logger.getLogger(ExceptionTest.class); public static void main(String[] args) { try { System.out.println(doException(6)); } catch (Exception e) { String message = e.getMessage().replace("java.lang.RuntimeException: ",""); if(e.getMessage().contains("false")){ System.out.println(StringUtil.getMsg(message)); }else{ System.out.println(message); } } } /* * * 测试方法 */ public static String doException(int i){ String result = ""; try { //假设程序运行到以下几个地方的时候都可能出现异常,这个时候我们就要主动抛出。 if(i == 1){ throw new RuntimeException("{success:'false',msg:'异常信息:i不能等于1'}"); }else if(i == 2){ throw new RuntimeException("{success:'false',msg:'异常信息:i不能等于2'}"); }else if(i == 3){ throw new RuntimeException("{success:'false',msg:'异常信息:i不能等于3'}"); }else{ //关于1除以i这段程序,我们就可以认为是可能发生异常的,比如当i=0的时候就会报by zero异常。 //所以我们有必要加try和catch try { result = String.valueOf(5*i); // System.out.println("5*"+i+"的结果是:"+result); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } } catch (Exception e) { // log.error("xxx功能异常:"+e); throw new RuntimeException(e); } return result; } }