06、使用 public 修飾字段
有些新手喜歡使用 public 修飾字段,因為不需要 getter/setter 方法就可以通路字段。但實際上,這是一個非常糟糕的設計;有經驗的程式員更習慣于提供盡可能低的通路級别。
07、使用 ArrayList 而不是 LinkedList
新手往往搞不清楚 ArrayList 和 LinkedList 之間的差別,是以更傾向于使用 ArrayList,因為比較面熟。但是呢,它們之間存在巨大的性能差異。簡單的說吧,如果“添加/删除”的操作比較多,而“擷取”的操作比較少,則應該首選 LinkedList。
08、使用過多的不可變對象
不可變對象有着不少的優點,比如說簡單性和安全性。但是呢,如你所料,它也有一些難以抗拒的弊端:對于每一個不同的值,它都需要一個單獨的對象來表示,這樣的對象太多的話,很可能會導緻大量的垃圾,回收的成本就變得特别高。
為了在可變與不可變之間保持平衡,通常會使用可變對象來避免産生太多中間對象。一個經典的例子就是使用 StringBuilder(可變對象) 來連接配接大量的字元串,否則的話,String(不可變對象)會産生很多要回收的垃圾。
反例:
String result="";
for(String s: arr){
result = result + s;
}
正例:
StringBuilder result = new StringBuilder();
for (String s: strs) {
result.append(s);
參考文章:為什麼 Java 字元串是不可變的?
09、父類沒有預設的無參構造方法
在 Java 中,如果父類沒有定義構造方法,則編譯器會預設插入一個無參的構造方法;但如果在父類中定義了構造方法,則編譯器不會再插入無參構造方法。是以下面的代碼會在編譯時出錯。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CO5IDN5MDOlBTY3QmMhVGO2AjN0QjM5YWO5MjZjVmM08CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
子類中的無參構造方法試圖調用父類的無參構造方法,但父類中并未定義,是以編譯出錯了。解決方案就是在父類中定義無參構造方法。
10、使用構造方法建立字元串
建立字元串有兩種方法:
1)使用雙引号
String er = "沉默王二";
1
2)使用構造方法
String san = new String("沉默王三");
但是它們之間有着很大的不同(可以參照建立 Java 字元串,用""還是構造函數),雙引号被稱為字元串常量,可以避免重複内容的字元串在記憶體中建立。