在java的方法中,如果想要抛出一个异常,那么就要在方法签名中加入throw Exception.但是在下边的方法中,虽然在方法签名中没有加入throw Excetion, 但是在显式的throw e的时候,依然能够抛出,这是为什么呢?
public void addReconciliation(ReconciliationBatch reconciliationBatch, List<ReconciliationDetail> list) {
        Map<String, Object> paramMap = new HashMap<>();
        try {
            paramMap.put("PI_RECONCILIATION_DATE", reconciliationBatch.getReconciliationDate());
            paramMap.put("PI_FILE_NAME", reconciliationBatch.getFileName());
            paramMap.put("PI_FILE_UUID", reconciliationBatch.getFileUUID());
            paramMap.put("PI_CHANNEL", reconciliationBatch.getDdmeChannelId());
            paramMap.put("PI_TOTAL_AMOUNT", reconciliationBatch.getReconciliationAmount());
            paramMap.put("PI_LOCAL_AMOUNT", reconciliationBatch.getLocalAmount());
            paramMap.put("PI_AMOUNT_GAP", reconciliationBatch.getAmountGap());
            paramMap.put("PI_OPERATOR", reconciliationBatch.getCreator());
            paramMap.put("PI_COMMENTS", reconciliationBatch.getComments());
            paramMap.put("PI_HAS_ERROR", reconciliationBatch.getHasError());
            paramMap.put("PO_MSG", "");
            paramMap.put("PI_TAB_RECONCILIATION", list);
            this.reconciliationMapper.insertReconciliation(paramMap);
        } catch (Exception e) {
            logger.error("addReconciliation(), happen error, ex= ", e.getMessage(), e);
            throw e;
        }
    }

解决方案 »

  1.   

    方法上是用throws,方法体里是throw,两个都可以
      

  2.   

    throw是抛出异常,哪个调用我的这个方法,我就抛给谁;
    catch是方法内抓取异常,然后处理,处理的方法,也包含往上抛 ;声明抛出某种异常的作用是:提醒方法的使用者,此方法会抛出某种异常,你要么捕获它,要么将它重新抛出 ;
    catch (Exception e) 的作用是:只要此方法有Exception或其子类异常 都会捕获 并不代表此方法有Exception异常