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;
}
}