打字猴:1.700448607e+09
1700448607
1700448608 }catch(Exception e){
1700448609
1700448610 e.printStackTrace();
1700448611
1700448612 }
1700448613
1700448614 }
1700448615
1700448616 这是很多程序员容易犯的错误,抛出异常是吧?分类处理多麻烦,就写一个catch块来处理所有的异常吧,而且还信誓旦旦地说“JVM会打印出栈中的出错信息”,虽然这没错,但是该信息只有开发人员自己才看得懂,维护人员看到这段异常时基本上无法处理,因为需要深入到代码逻辑中去分析问题。
1700448617
1700448618 正确的做法是对异常进行分类处理,并进行封装输出,代码如下:
1700448619
1700448620 public void doStuff(){
1700448621
1700448622 try{
1700448623
1700448624 //do something
1700448625
1700448626 }catch(FileNotFoundException e){
1700448627
1700448628 log.info(“文件未找到,使用默认配置文件……”);
1700448629
1700448630 }catch(SecurityException e){
1700448631
1700448632 log.error(“无权访问,可能原因是……”);
1700448633
1700448634 e.printStackTrace();
1700448635
1700448636 }
1700448637
1700448638 }
1700448639
1700448640 如此包装后,维护人员看到这样的异常就有了初步的判断,或者检查配置,或者初始化环境,不需要直接到代码层级去分析了。
1700448641
1700448642 (3)解决Java异常机制自身的缺陷
1700448643
1700448644 Java中的异常一次只能抛出一个,比如doStuff方法有两个逻辑代码片段,如果在第一个逻辑片段中抛出异常,则第二个逻辑片段就不再执行了,也就无法抛出第二个异常了,现在的问题是:如何才能一次抛出两个(或多个)异常呢?
1700448645
1700448646 其实,使用自行封装的异常可以解决该问题,代码如下:
1700448647
1700448648 class MyException extends Exception{
1700448649
1700448650 //容纳所有的异常
1700448651
1700448652 private List<Throwable>causes=new ArrayList<Throwable>();
1700448653
1700448654 //构造函数,传递一个异常列表
1700448655
1700448656 public MyException(List<?extends Throwable>_causes){
[ 上一页 ]  [ :1.700448607e+09 ]  [ 下一页 ]