千家信息网

Java程序员常犯的错误是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"Java程序员常犯的错误是什么",在日常操作中,相信很多人在Java程序员常犯的错误是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java程序员
千家信息网最后更新 2026年11月01日Java程序员常犯的错误是什么

这篇文章主要介绍"Java程序员常犯的错误是什么",在日常操作中,相信很多人在Java程序员常犯的错误是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java程序员常犯的错误是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

01、把 Array 转成 ArrayList

说实在的,很多 Java 程序员喜欢把 Array 转成 ArrayList:

List list = Arrays.asList(arr);

但实际上,Arrays.asList() 返回的 ArrayList 并不是 java.util.ArrayList,而是 Arrays 的内部私有类 java.util.Arrays.ArrayList。虽然名字完全相同,都是 ArrayList,但两个类有着很大的不同。Arrays.ArrayList 虽然有 set()、get() 和 contains() 等方法,但却没有一个方法用来添加元素,因此它的大小是固定的。

如果想创建一个真正的 ArrayList,需要这样做:

List list = new ArrayList(Arrays.asList(arr));

ArrayList 的构造方法可以接收一个 Collection 类型的参数,而 Arrays.ArrayList是其子类,所以可以这样转化。

02、通过 Set 检查数组中是否包含某个值

方法:

Set set = new HashSet(Arrays.asList(arr)); return set.contains(targetValue);

这种方法确实可行,但却忽视了性能问题;为了能够尽快完成检查,可以这样做:

Arrays.asList(arr).contains(targetValue);

或者使用普通的 for 循环或者 for-each。

03、通过 for 循环删除列表中的元素

新手特列喜欢使用 for 循环删除列表中的元素,就像这样:

List list = new ArrayList(Arrays.asList("沉", "默", "王", "二")); for (int i = 0; i < list.size(); i++) {     list.remove(i); } System.out.println(list);

上面这段代码的目的是把列表中的元素全部删除,但结果呢:

[默, 二]

竟然还有两个元素没删除,why?

当 List 的元素被删除时,其 size() 会减小,元素的下标也会改变,所以想通过 for 循环删除元素是行不通的。

那 for-each 呢?

for(String s : list) {     if ("沉".equals(s)) {        list.remove(s);     } }  System.out.println(list);

竟然还抛出异常了:

Exception in thread "main" java.util.ConcurrentModificationException     at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)     at java.util.ArrayList$Itr.next(ArrayList.java:859)     at com.cmower.java_demo.programcreek.Top10Mistake.main(Top10Mistake.java:15)

抛出异常的原因,可以查看我之前写的文章《Java,你告诉我 fail-fast 是什么鬼?》。

有经验的程序员应该已经知道答案了,使用 Iterator:

Iterator iter = list.iterator(); while (iter.hasNext()) {     String s = iter.next();      if (s.equals("沉")) {         iter.remove();     } }  System.out.println(list);

程序输出的结果如下:

[默, 王, 二]

04、使用 Hashtable 而不是 HashMap

通常来说,哈希表应该是 Hashtable,但在 Java 中,哈希表通常指的是 HashMap。两者之间的区别之一是 Hashtable 是线程安全的。如果没有特殊要求的话,哈希表应该使用 HashMap 而不是 Hashtable。

05、使用原始类型

在 Java 中,新手很容易混淆无限通配符和原始类型之间的差别。举例来说,List list 为无限通配符,List list 为原始类型。

来看下面这段代码:

public static void add(List list, Object o){     list.add(o); } public static void main(String[] args){     List list = new ArrayList();     add(list, 18);     add(list, "沉默王二");     String s = list.get(0); }

这段代码在运行时会抛出异常:

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 和 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程序员常犯的错误是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

方法 程序 元素 对象 可变 程序员 之间 字符 字符串 类型 原始 错误 代码 新手 学习 循环 编译 不同 字段 文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技有限公司 广州淘业互联网络科技 互联网佳科技有限公司 没上市的科技互联网公司 猪兼强互联网科技 互联网科技作文 互联网科技公司官网 互联网科技ppt模板 易通互联网络科技有限公司 广西互联网科技公司 青岛中康互联网医疗科技有限公司 中国的互联网科技企业的崛起 互联网科技革命什么开始 互联网科技与大数据专业 阿里互联网科技企业 朱啸虎曾投资哪些互联网科技企业 互联网风格科技公司名称 青岛易易互联网科技 现代互联网科技公司 如何强化互联网金融科技 互联网科技金融公司 宝灵互联网科技有限公司 互联网科技革命什么开始 湖南一路畅行互联网科技 徐州市互联网科技有限公司 半导体行业属于互联网高科技类吗 郑州欣桑互联网科技有限公司 山东大美朱楼互联网科技有限公司 互联网时代高科技布局 互联网的科技体现在哪里
0