---
title: Java å¼åçç¼ç¨å©æ¢¦ï¼è¿äºåä½ æ²¡è¸©è¿ç®æè¾
date: 2020-08-07 08:01:01
url: java/java-code-standards
tags:
- å¼åæå·§
categories:
- Java å¼å
---
> æç« å·²ç»æ¶å½å¨ [Github.com/niumoo/JavaNotes](https://github.com/niumoo/JavaNotes) ï¼æ´æ Java ç¨åºåæéè¦ææ¡çæ ¸å¿ç¥è¯ï¼æ¬¢è¿Staråææã
> 欢è¿å
³æ³¨æç[å
¬ä¼å·](https://github.com/niumoo/JavaNotes#%E5%85%AC%E4%BC%97%E5%8F%B7)ï¼æç« æ¯å¨æ´æ°ã
å¾å¤ Java åå¦è
å¨å¼å§ç¼ç¨æ¶ä¼åºç°ä¸äºé®é¢ï¼è¿äºé®é¢å¹¶ä¸æ¯ææä¸ªç¹å®é¢åçé®é¢ï¼ä¹ä¸æ¯æå¯¹æä¸ªä¸å¡ä¸çæè导è´çé®é¢ï¼èæ¯å¯¹åºç¡ç¥è¯ä¸å¤çæå¯¼è´çé®é¢ãèå°±æ¯è¿äºé®é¢è®©æä»¬ç¼åäºä¸äºä¸å¤å¥å£®ç代ç ã
è¿ç¯æç« ä¼å举å ç§ç¼ç¨åå¦è
常常åºç°çä¸äºé®é¢ï¼æç¸ä¿¡è¿äºé®é¢å¤å¤å°å°ä¹æ¾å°æ°çç°å¨ææ¾ç»çä½ ã妿è§å¾æç« ä¸éï¼ä¸å¦¨ç¹èµå享ï¼è®©æ´å¤äººè·³è¿è¿äºå¼åä¸çåã
## éå¤å¯è§ç Null å¼
æè§è¿å¾å¤ç代ç 伿 Null å¼ä½ä¸ºè¿åå¼ï¼å½ä½ 颿æ¯ä¸ä¸ªå符串æ¶ï¼æå¤å¾å°äºä¸ä¸ª Null å¼ï¼å½ä½ 颿å¾å°ä¸ä¸ª List æ¶ï¼æå¤åå¾å°äºä¸ä¸ª Null å¼ï¼å¦æä½ ä¸è¿è¡å¤çï¼é£ä¹ä½ è¿ä¼æå¤å¾å° `NullPointerException`.
å°±åä¸é¢è¿æ ·ã
```java
// æ
åµ1
String userTag = getUserTag();
if (userTag.equals("admin")) { // NullPointerException
// ...
}
// æ
åµ2
List carList = getCarList();
for (String car : carList) { // NullPointerException
// ...
}
```
为äºé²æ¢è¿ç§æ
åµï¼ä½ å¯ä»¥å¨ List è¿åæ¶ç»åºä¸ä¸ªç©ºçéåè䏿¯ Nullï¼å¦ææ¯å符串ï¼ä½ å¯ä»¥æè¦ç¡®å®æå¼å¯¹è±¡æ¾å¨æ¯è¾çåé¢ã
```java
if ("admin".equals(userTag)) {
// ...
}
// æè
if (Objects.equals(userTag,"admin")){
// ...
}
```
## 没æè¿è¡ç©ºå¼æ£æ¥
å¯è½ä½ èèå°äºä¸é¢ç Null 弿
åµï¼ä½æ¯å¨å®é
å¤çæ¶æ²¡æèèç©ºå¼æ
åµï¼æ¯å¦å符空串空串 ""ï¼æè
éå为空ãé£ä¹å¨åç»å¤çæ¶åæå¯è½å¾å°ä¸ä¸ª `NullPointerException`. æä»¥ä½ åºè¯¥è¿è¡ç©ºå¼å¤æã
```java
String userTag = getUserTag();
if (userTag != null && userTag.trim() != "") {
// ...
}
List carList = getCarList();
if (carList != null && !carList.isEmpty()) {
// ...
}
```
## 忽ç¥çå¼å¸¸å¤ç
å¼å¸¸å¤çæ»æ¯ä¸ä»¶ç¦äººçäºï¼è忽ç¥å¼å¸¸ä¼¼ä¹æ»æä¸ç§å¸å¼äººçéåãæè§è¿åä¸é¢è¿æ ·ç代ç ã
```java
try {
List result= request();
// ...
}catch (Exception e){
}
```
ä½ æ²¡æçéï¼catch 䏿²¡æä»»ä½å
容ï¼åæ¥åºç°äºé®é¢ï¼ççæ¥å¿æä»¶ä¸ç太平æ 迹å¯å¯»ãå¼å¸¸æ¯æ
ææåºæ¥çï¼ä½ åºè¯¥æ£ç¡®å¤çå®ä»¬æè
ç»§ç»æåºãèä¸åæ¶ï¼ä½ 该è¾åºä¸è¡æ¥å¿ç¨æ¥è®°å½è¿ä¸ªå¼å¸¸ï¼æ¹ä¾¿ä»¥åçé®é¢è¿½è¸ªã
## 没æéæ¾èµæº
å¨è¯»åæä»¶æè
请æ±ç½ç»èµæºæ¶ï¼æ»æ¯éè¦è¿è¡ close æä½ï¼è¿å¾éè¦ï¼å¦åå¯è½ä¼é»å¡å
¶ä»çº¿ç¨ç使ç¨ã使¯åå¦è
å¯è½ä¼å¿è®°è¿ä¸æ¥æä½ãå
¶å®å¨ Java 7 å¼å§ï¼å°±æä¾äº `try-with-resources` èªå¨å
³éèµæºçç¹æ§ï¼åªéè¦ææå¼çèµæºæ¾å
¥ `try` ä¸ã
```java
try (FileReader fileReader = new FileReader("setting.xml")) {
// fileReader.read();
// ...
} catch (Exception e) {
e.printStackTrace();
}
```
åä¸é¢è¿æ ·ï¼ä¸éè¦å¨ `finally` éæå¨è°ç¨ `fileReader` ç `close` æ¹æ³å
³éèµæºï¼å 为æ¾å¨ `try` éçèµæºè°ç¨ä¼å¨ä½¿ç¨å®æ¯æ¶èªå¨è°ç¨ `close`. èä¸ä¸ç®¡æ¯å¦æå¼å¸¸æåºï¼è¿å¾å®ç¨ã
## ConcuretModificationException
æ»æä¸å¤©ä½ ä¼éå° `ConcuretModificationException` ï¼ç¶åå¼å§ç¾åº¦æç´¢å®çè§£å³æ¹å¼ï¼è¿ä¸ªå¼å¸¸æå¸¸è§çåºæ¯æ¯ä½ å¨éåä¸ä¸ªéåæ¶è¿è¡æ´æ°æä½ï¼æ¯å¦åä¸é¢è¿æ ·ã
```java
List list = new ArrayList<>();
list.add("a1");
list.add("b1");
list.add("b2");
list.add("c1");
for (String s : list) {
if ("b1".equals(s)) {
list.remove(s);
}
}
```
è¿ä¸ªå¼å¸¸å¾æç¨å¤ï¼å 为 ArrayList 䏿¯çº¿ç¨å®å
¨çéåï¼åè®¾ä½ è¿è¾¹ä¸è¾¹éåï¼å¦ä¸ä¸ªçº¿ç¨ä¸ææ´æ°ï¼é线ç¨å®å
¨éåä¼å¯¼è´ä½ çéåç»æä¸æ£ç¡®ï¼æä»¥è¿ä¸ªå¼å¸¸çå卿¯åççãåç HashMap 乿¯å¦æ¤ï¼å
³äº HashMap ä¹åå·²ç»æä¸ç¯æç« 详ç»ä»ç»äºï¼å¯ä»¥åè [æéä¿ææç HashMap æºç åæè§£è¯»](https://mp.weixin.qq.com/s/q-rWq79HmzPe08gyfOjaIA)ã
## ç¼ºå°æ³¨é
**åç¡®çæ³¨éå¯ä»¥æäººäºæ°´ç«**ï¼è¿ç¹ææ¶åä¸ç¹ä¹ä¸å¤¸å¼ ãè½ç¶è¯´ä¼ç§çä»£ç æ¬èº«å°±æ¯éå¸¸å¥½çæ³¨éï¼ä½æ¯è¿å®é
å¼åèµ·æ¥ï¼å¾å°åçãæ³¨éå¹¶ä¸éè¦ä½ äºæ å·¨ç»çä¸ä¸è®°å½ï¼ä½æ¯ä½ è¯¥å¨æ ¸å¿é»è¾æ·»å åºæçæ³¨éï¼æ¯å¦å¤æé»è¾çå®ç°æè·¯ï¼å½åé»è¾ä¸å¡éæ±ãæä¸ªå¤æçæ·»å åå ï¼æä¸ªå¼å¸¸çåçæ
åµççãè¿å¯ä»¥è®©ä½ 卿ªæ¥çæä¸å¤©éè¦åçç°å¨çä»£ç æ¶æè°¢èªå·±ãæ´å¯ä»¥**è®©ä½ å¨æå¤©çç©é
ä¸è½»æ¾èåº**ã
## ä¸è¿è¡ä»£ç æµè¯
æè§è¿æäºåäºå¨åè½å¼å宿¯åç´æ¥æç»å¯¹æ¥åäºä½¿ç¨ï¼èèªå·±å´æ²¡æç»è¿ä»»ä½æµè¯ï¼æè
åªæ¯æµè¯äºæä¸ªç®åçæ
åµãæµè¯æ¯å¼åè¿ç¨ä¸çéè¦ç¯èï¼æ²¡æç»è¿ä¸¥æ ¼æµè¯ç代ç å¾é¾è¯´æ²¡æé®é¢ï¼æè§å¾å¨åè½å¼å宿¯åè³å°éè¦**åå
æµè¯**ï¼**ç¹æ®ç¨ä¾**æµè¯ï¼**éææµè¯**以åå
¶ä»å½¢å¼çæµè¯ã**ä¸¥æ ¼çæµè¯ä¸ä»
å¯ä»¥ç¬¬ä¸æ¶é´åç°é®é¢ï¼æ´å¯ä»¥åå°åé¢ä¸å¿
è¦ç对æ¥è°è¯æ¶é´**ã
## éå¤é è½®å
ä½ ç¥éçï¼Java 社åºé常活è·ï¼åå¨ç大éçç¬¬ä¸æ¹ç±»åºï¼å¼æºä½è
å¯è½è±è´¹äºæ°å¹´æ¶é´å»ç»´æ¤åå®åç±»åºï¼è¿äºç±»åºé常ä¼ç§ãåæ¶ JDK 乿ä¾äºå¤§éç常ç¨çåè½å°è£
ãè¿äºé½å¯ä»¥**为æä»¬çå¼åé度æä¸ç¿
è**ãæä»¥ï¼å½ä½ éè¦ä¸ä¸ªåè½æ¶åï¼åºè¯¥é¦å
çä¸ JDK åå·²ç»å¼å
¥çç±»åºä¸æ¯å¦å·²ç»åå¨ç¸ååè½ï¼è䏿¯èªå·±éå¤é è½®åï¼èä¸å¤§é¨åæ
åµä¸ä½ é çè½®åè¿ä¸å¦å«äººå¥½ã
ä¸é¢ä¸¾äºä¾åã
- ä½ éè¦æ¥å¿è®°å½ï¼å¯ä»¥ä½¿ç¨ logback.
- ä½ éè¦ç½ç»æä½ï¼å¯ä»¥ä½¿ç¨ netty.
- ä½ éè¦è§£æ JSONï¼å¯ä»¥ä½¿ç¨ gson.
- ä½ éè¦è§£æè¡¨æ ¼ï¼å¯ä»¥ä½¿ç¨ apache poi.
- ä½ éè¦éç¨æä½ï¼å¯ä»¥ä½¿ç¨ apache commons.
å¦å¤ä¸ç§æ
嵿¯ï¼ä½ å¯è½ä¸ç¥éæä¸ªåè½å¨ JDK ä¸å·²ç»å®ç°ï¼è¿æ¶åä½ åºè¯¥å¤å¤æ¥ç JDK Document. æå°±å¨å·¥ä½ä¸è§å°è¿åäºæåå符串 splitï¼ä¸ºäºè·åæ¶é´æ³æ Date 对象转æ¢å° Calendar.
## 缺å°å¿
è¦çæ²é
è¿ä¸ªé¨åæ¯åå¼å没æå
³ç³»çï¼ä½æ¯è¿ä¸ªç¯èå¾å¾ä¼å½±åæç»çå¼åç»æãè¿è¡å
·ä½çå¼åä¹åï¼ä½ åºè¯¥è¯¦ç»çæ²éå¹¶çè§£åè½çéæ±ï¼è¿æ ·ä½ æè½é对å
·ä½çéæ±ååºä¸å离å®é
éè¦ç代ç ãææ¶åä½ å¾æå¯è½å 为缺å°å¿
è¦çæ²éï¼é误äºçè§£äºéæ±ï¼æç»å¨å¼å宿¯ååç°èªå·±åçåè½å®å
¨æ²¡æç¨å¤ã
## 没æä»£ç è§è
代ç è§èæ§é常éè¦ï¼å¦æä¸ä¸ªé¡¹ç®éå
æ¥çåç§ç¨å¥å¤æªç代ç è§èï¼ä¼è®©ç»´æ¤è
åå头ç¼ãèä¸è½¯ä»¶è¡ä¸é«éåå±ï¼å¯¹å¼åè
ç综åç´ è´¨è¦æ±ä¹è¶æ¥è¶é«ï¼ä¼ç§çç¼ç¨ä¹ æ¯ä¹å¯ä»¥æé«è½¯ä»¶çæç»è´¨éãæ¯å¦ï¼æ æ°ç«å¼çå½å飿 ¼ææé
è¯»ä¹ æ¯ï¼äºè±å
«é¨çé误ç äººä¸ºå° å¢å ææ¥é®é¢çé¾åº¦ï¼å·¥ç¨ç»ææ·· 乱导è´åç»é¡¹ç®ç»´æ¤è°é¾ï¼æ²¡æé´æçæ¼æ´ä»£ç æè¢«é»å®¢æ»å»ï¼è´¨éä½ä¸ç代ç ä¸çº¿ä¹åæ¼æ´ç¾åºççãå 为没æç»ä¸ç代ç è§èï¼å¼åä¸çé®é¢å¯è½å±åºä¸ç©·ã
ä¸é¢ç®åå举äºåºè¯¥ç»ä¸çå¼åè§èãå¦**å½å飿 ¼å¦ä½æ¯å¥½ï¼å¸¸éåç§°ç»æææ ·ï¼ä»£ç æ ¼å¼æä¹ç»ä¸ï¼æ¥ææ¶é´æ ¼å¼å¦ä½å¤çï¼éåå¤ç注æäºé¡¹ï¼æ¥å¿æå°ææ è§èï¼åå交äºå
·ä½è§çº¦**çã
ä¸é¢æè¯´çå¼åè§è代ç è§èæ¨èé¿éæ¨åºç ã**Java å¼åæå**ãï¼éé¢è¯¦ç»å举äºå¨ Java å¼åä¸å个æ¹é¢åºè¯¥éµå®çè§çº¦åè§èãææ°çæ¬å¨ 8æ 3æ¥å·²ç»åå¸ï¼å¯ä»¥å¨å
¬ä¼å· â**æªè¯»ä»£ç **â ç´æ¥åå¤ "java " **è·åææ°ç pdf.**
## æ»ç»
Bug åææ¯ä¸çè¯¯è§£é½æ¯ç¾ä¸½çè°å¢ï¼ç¦å°æ©æ¯è¬çæä»¬ç»å°è§£å³è¿äºé®é¢ãå½è¿èªå·±ææ¡ï¼æ¯ä¸æ¬¡æ¢æ¸
çè¿äºææ¯è¯¯è§£ï¼é½ä¼å¢å æä»¬å¯¹å¼åç¼ç ççè§£ã**å°½æ
æ¥æå§ï¼è²å½©ææææè¶£ï¼ä¸è¬ä½éªææ¯äººçï¼ä¸ç®¡æ¯å¤æ ·çææ¯ï¼è¿æ¯å¤æ ·çé®é¢ï¼æé½æ³çè§ã**
**åèï¼**
[1] [A beginnerâs guide to Java programming nightmares](https://jaxenter.com/java-programming-nightmares-156749.html)
[2] [Java⢠Platform, Standard Edition 8 API Specification](https://docs.oracle.com/javase/8/docs/api/)
**æåçè¯**
>æç« å·²ç»æ¶å½å¨ [Github.com/niumoo/JavaNotes](https://github.com/niumoo/JavaNotes) ï¼æ¬¢è¿Staråææãæ´æä¸çº¿å¤§åé¢è¯ç¹ï¼Javaç¨åºåéè¦ææ¡çæ ¸å¿ç¥è¯çæç« ï¼ä¹æ´çäºå¾å¤æçæåï¼æ¬¢è¿ **Star** åå®åï¼å¸ææä»¬ä¸èµ·åå¾ä¼ç§ã
æç« æå¸®å©å¯ä»¥ç¹ä¸ªã**èµ**ãæã**å享**ãï¼é½æ¯æ¯æï¼æé½å欢ï¼
æç« æ¯å¨æç»æ´æ°ï¼è¦å®æ¶å
³æ³¨ææ´æ°çæç« 以åå享ç干货ï¼å¯ä»¥å
³æ³¨ã **æªè¯»ä»£ç ** ãå
¬ä¼å·æè
[æçå客](https://www.wdbyte.com/)ã
