java代码中常见的坑

(1)空指针
null.get()或者null.set()都是空指针
解决方法:

每次拿到一个变量值,都判空:非空一个逻辑;空一个逻辑即可

(2)循环的插入
例如list.add(a);

a必须在循环内部new

(3)String.split()方法参数需要转译

String[] arr = amtStr.split("\\.");

String[] arr = amtStr.split("\\|");
对于最后存在空值的情况,默认会出现忽略空值,导致分隔后的字段个数有误,解决方法:先用##代替空格,后面再替换

/**
	 * 
	 * 按照|分割文件一行内容,用"|##|"代替空格||,避免结尾||分割后丢失问题
	 * 
	 * @param lineData
	 */
	private String[] splitLineData(String lineData){
         while (true) {
	         lineData = lineData.replaceAll("[|][|]", "|##|");
	         if (!lineData.contains("||")) break;
         }
        if (lineData.lastIndexOf("|") == (lineData.length() - 1)) {
            lineData = lineData + "##";
        }
        String[] datas = lineData.split("\\|");
        return datas;
	}
(4)创建目录时尽量用创建多级目录的new File().mkdirs(),不要用new File().mkdir(),避免报错

String path = "D:/bfjTest/BFJ/123/456";
new File(path).mkdirs();
(5)代码中需要有适当的便于调试的日志

比如调用别的接口后,需要打印出请求和响应信息


(6)Oracle字段慎用CHAR类型,除非该字段值确定是固定长度

否则若位数不足,会自动补齐,但是若用到该字段做查询条件,又会查不到。


(7)乱码问题

JSP页面提交到后台的中文乱码问题解决:

String objAccountName = request.getParameter("objAccountName");
objAccountName=new String(objAccountName.getBytes("ISO8859-1"),"utf-8");

后台返回JSP页面的中文乱码问题解决:

@RequestMapping(value="/merChgNotice",method = RequestMethod.POST,produces = "application/json;charset=utf-8")


注意:文件名、文件存放路径等不要使用中文,否则很容易处理时乱码


(8)BigDecimal字段的累加问题

必须要赋值,否则起不到累加效果。区别于基本类型

failAmt = failAmt.add(jyMcBatDfDl.getDfAmt());

(9)properties属性文件内容中,=左右两边不能有空格,对于密钥等很长的字符串拷贝时不能换行

(10)任务调度问题

任务尽量通过调度中心调度,不要自行调度。因为在测试或者实际的生产环境上通常是多实例部署,自行调度容易互相冲突

(11)标准的关闭流写法

public void processFile(String fName) throws FileNotFoundException, IOException {
	FileInputStream fis;
	
	try {
		fis = new FileInputStream(fName);
		int sz;
		byte[] byteArray = new byte[BLOCK_SIZE];
		while ((sz = fis.read(byteArray)) != -1) {
			processBytes(byteArray, sz);
		}
	}
	finally {
		if (fis != null) {
			try {
				fis.close();
			} catch (IOException e) {
				log(e);
			}
		}
	}
}

(12)金额字段,格式转换时要慎重

Double转String,直接用toString是科学计数法,超过7位的都是用科学计数法显示字符串的。。。。所以导致20100000.00分转化成String为2.01E7。

解决方法:使用功能强大的BigDecimal


(13)

老婆在家,打算开个淘宝小店卖童装,苦于不懂店铺的基本装修、排版等等各类杂事,还请读者有了解这块的帮忙留言指导一下,小可不甚感激


你可能感兴趣的:(java基础)