Java程序员最常犯的错TOP10,你还在犯么?( 二 )

这段代码在运行时会抛出异常:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String    at com.cmower.java_demo.programcreek.Top10Mistake.main(Top10Mistake.java:38)使用原始类型非常的危险,因为跳过了泛型的检查 。至于 List<Object> 和 List 之间的区别,查看我写的另外一篇文章:《为什么不应该使用Java的原始类型》 。
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程序员最常犯的错TOP10,你还在犯么?

文章插图
 
子类中的无参构造方法试图调用父类的无参构造方法,但父类中并未定义,因此编译出错了 。解决方案就是在父类中定义无参构造方法 。
Java程序员最常犯的错TOP10,你还在犯么?

文章插图
 
10、使用构造方法创建字符串创建字符串有两种方法:
1)使用双引号
String er = "沉默王二";2)使用构造方法
String san = new String("沉默王三");但是它们之间有着很大的不同(可以参照创建 Java 字符串,用””还是构造函数),双引号被称为字符串常量,可以避免重复内容的字符串在内存中创建 。

【Java程序员最常犯的错TOP10,你还在犯么?】


推荐阅读