天天看點

驚呆了!Java程式員最常犯的錯竟然是這10個(二)

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 中,如果父類沒有定義構造方法,則編譯器會預設插入一個無參的構造方法;但如果在父類中定義了構造方法,則編譯器不會再插入無參構造方法。是以下面的代碼會在編譯時出錯。

驚呆了!Java程式員最常犯的錯竟然是這10個(二)

子類中的無參構造方法試圖調用父類的無參構造方法,但父類中并未定義,是以編譯出錯了。解決方案就是在父類中定義無參構造方法。

驚呆了!Java程式員最常犯的錯竟然是這10個(二)

10、使用構造方法建立字元串

建立字元串有兩種方法:

1)使用雙引号

String er = "沉默王二";

1

2)使用構造方法

String san = new String("沉默王三");

但是它們之間有着很大的不同(可以參照建立 Java 字元串,用""還是構造函數),雙引号被稱為字元串常量,可以避免重複内容的字元串在記憶體中建立。