关于代码编写中的异常处理

有一个方法, 假设是

public void add(int a, int b){
    try{
        System.out.print(a + b);
    }catch (Execption e){
         // 此处做异常处理
    }
}

然后另一处调用的地方这么写

 try{
     add(1, 3);
 }catch(Execption e){
     // 异常处理
 }

阅读代码的时候看到类似这种代码,就有个疑问,那个add方法,既没有返回值,也没有异常抛出
那么调用的时候try catch还有什么用呢?

对于api来说,越深的代码越应该抛出异常,让上层调用方进行处理,如果全部在内部catch掉,查找错误是非常费劲的,对于上层而言,应该尽可能在一个地方统一捕获异常进行处理,spring的intercept或者java的代理机制都可以实现全局异常的拦截。

这是个好习惯,对于方法调用,容易出异常的不管方法内部怎么处理,外部都进行异常捕获,增强程序的健壮性。
另外,当工程大的时候,很多方法内部处理可能会随时变化,所以也加异常处理。

遇到自己能够处理的异常,不影响程序执行的异常,就吃掉它。
甚至,利用异常有时候可以实现一些特别的技巧,比如跳出多重循环,快速检测某种环境是否正常。
自己不能处理的一定要丢出,让上层去处理,否则程序进入莫名其妙的错误而没有异常丢出,这样的代码很难调试,也不健壮。