一次一次的排除错误早已成了习惯性的动作,一天两天甚至一个月都很难找到错误的原因,在上万行的代码中更是如此。也许错误是沧海一粟,那么就会考验耐心。
如下有一串代码:
这段代码的意思是将数据以CSV的形式保存起来,它使用的是软件提供商的类库。
try
{
objBAOStream = new ByteArrayOutputStream();
objBAOStream = new ByteArrayOutputStream();
objPrWriter = new PrintWriter(objBAOStream);
CSVWriter csvWriter = new CSVWriter(objPrWriter);
List lstDetailsData = logicDataResult.getList();
int intSize = lstDetailsData.size();
List lstCSVData = new ArrayList(intSize + 1 );
for ( int i = 0 ; i <= intSize; i ++ ) {
if (i == 0 ) {
java.util.List lstTitle = java.util.Arrays
.asList(strArrTitle);
lstCSVData.add(lstTitle);
}
if (i > 0 ) {
KSK08AP01LogicData logicDataRow = (KSK08AP01LogicData) lstDetailsData
.get(i - 1 );
List lstCSVRowData = new ArrayList();
lstCSVRowData.add(logicDataRow.getNYK_KYT_CDE());
lstCSVRowData
.add(replaceStr(logicDataRow.getKYT_NAM_RYK()));
lstCSVRowData.add(logicDataRow.getSRS_CDE());
lstCSVRowData.add(replaceStr(logicDataRow
.getDAI_SRS_NAM_RYK()));
lstCSVRowData.add(logicDataRow.getMKR_CDE());
lstCSVRowData
.add(replaceStr(logicDataRow.getMKR_NAM_RYK()));
lstCSVRowData.add(StringUtil.unformatDate(logicDataRow
.getSIR_KZY_YMD()));
lstCSVRowData.add(StringUtil
.unformatDate(replaceStr(logicDataRow
.getSRS_NOU_YMD())));
lstCSVRowData
.add(replaceStr(logicDataRow.getSRS_DEN_NUM()));
lstCSVData.add(lstCSVRowData);
}
}
csvWriter.write(strFirstTitle, lstCSVData);
} catch(Exception){//do nothing for it}
finally {
if (objPrWriter != null ) {
objPrWriter.close();
objPrWriter = null ;
}
if (objBAOStream != null ) {
objBAOStream.close();
}
previousForm.reset(mapping, request);
}
出现的问题是文件出来了,但是数据没有加载,其实很简单,类已经GET异常,但是却什么也没有做,代码继续往下执行导致了这样的结果。
这样的情况还有很多类型。
1.预防的方法不适用于出现的异常或错误。
2.出现的异常或错误过于宏观。
当然这样的方式还有很多情况,换句话讲,我们不应该预防错误,而应该主动的将其爆发出来。这样的方式有如下的几点好处:
1.方便了测试。
2.降低了偶然性错误,降低了时间性错误。
3.降低了后期维护的成本。
当然好处不止这么多,但是我们要做的需要如下几点:
A:采用预防性思维但是不要采用预防性编程。
B:制定文档,针对各种类型的错误制定解决方案,这样可以达到程序的规范性。
C:程序开发之时要采用,注释之类的标签,也可制定既定方案。
D:最后产品交付之时采用统一处理方式。