这段代码在运行时会抛出异常:
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 中,如果父类没有定义构造方法,则编译器会默认插入一个无参的构造方法;但如果在父类中定义了构造方法,则编译器不会再插入无参构造方法 。所以下面的代码会在编译时出错 。

文章插图
子类中的无参构造方法试图调用父类的无参构造方法,但父类中并未定义,因此编译出错了 。解决方案就是在父类中定义无参构造方法 。

文章插图
10、使用构造方法创建字符串创建字符串有两种方法:
1)使用双引号
String er = "沉默王二";2)使用构造方法String san = new String("沉默王三");但是它们之间有着很大的不同(可以参照创建 Java 字符串,用””还是构造函数),双引号被称为字符串常量,可以避免重复内容的字符串在内存中创建 。【Java程序员最常犯的错TOP10,你还在犯么?】
推荐阅读
- JavaScript优雅写法及骚操作
- Java 内部类详解
- 5 个提升你 JavaScript 编码水平的实例
- Java HashMap遍历的四种方式
- 5种创建Java对象的方式
- Java中数据传输加密与签名那些事
- Java随机产生中文昵称
- JDBC基础整理
- JavaScript 数据类型与类型判断详解
- 为什么在中国做程序员,比起掉头发,更怕掉队?那国外程序员呢?
