1. 程式人生 > >java程式碼中常見的坑

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)

老婆在家,打算開個淘寶小店賣童裝,苦於不懂店鋪的基本裝修、排版等等各類雜事,還請讀者有了解這塊的幫忙留言指導一下,小可不甚感激