广告
返回顶部
首页 > 资讯 > 精选 >Java程序员常犯的错误是什么
  • 231
分享到

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

2023-06-16 16:06:40 231人浏览 安东尼
摘要

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

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

01、把 Array 转成 ArrayList

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

List<String> list = Arrays.asList(arr);

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

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

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

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

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

方法:

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

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

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

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

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

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

List<String> list = new ArrayList<String>(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<String> 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<String> list = new ArrayList<String>();     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  中,如果父类没有定义构造方法,则编译器会默认插入一个无参的构造方法;但如果在父类中定义了构造方法,则编译器不会再插入无参构造方法。所以下面的代码会在编译时出错。

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

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

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

10、使用构造方法创建字符串

创建字符串有两种方法:

1)使用双引号

String er = "沉默王二";

2)使用构造方法

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

但是它们之间有着很大的不同,双引号被称为字符串常量,可以避免重复内容的字符串在内存中创建。

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

--结束END--

本文标题: Java程序员常犯的错误是什么

本文链接: https://www.lsjlt.com/news/284320.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java程序员常犯的错误是什么
    这篇文章主要介绍“Java程序员常犯的错误是什么”,在日常操作中,相信很多人在Java程序员常犯的错误是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java程序员常犯的错误是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-16
  • Python程序员最常犯的十个错误分别是什么
    本篇文章给大家分享的是有关Python程序员最常犯的十个错误分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。常见错误1:错误地将表达式作为函数的默认参数在Python中...
    99+
    2023-06-17
  • 初级程序员常犯错误一览
    最近接手其他人做的项目,导致之前的一些幻想破灭了。因为刚工作的时候做项目是php,而php本身的web框架一般只简单区分mvc,稍微麻烦一些的会多个library或者helper之类的。这样分层很少有优点同时也有缺点。当然了,现代的框架一般...
    99+
    2023-08-08
  • Java程序员容易犯的10大低级错误是什么
    这篇文章主要介绍“Java程序员容易犯的10大低级错误是什么”,在日常操作中,相信很多人在Java程序员容易犯的10大低级错误是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java程序员容易犯的10大低...
    99+
    2023-06-17
  • PHP程序员最常犯的11个MySQL错误
      对于大多数web应用来说,数据库都是一个十分基础性的部分。如果你在使用PHP,那么你很可能也在使用MySQL—LAMP系列中举足轻重的一份子。   对于很多新手们来说,使用PHP可以在短短几个小时之内轻...
    99+
    2022-05-30
    MySQL PHP
  • 十个Python程序员易犯的错误
    常见错误1:错误地将表达式作为函数的默认参数 在Python中,我们可以为函数的某个参数设置默认值,使该参数成为可选参数。虽然这是一个很好的语言特性,但是当默认值是可变类型时,也会导致一些令人困惑的情况。我...
    99+
    2022-06-04
    程序员 错误 Python
  • Java开发人员最常犯的5个错误总结
    目录前言1. 使用Objects.equals比较对象2. 日期格式错误3. 在 ThreadPool 中使用 ThreadLocal4. 使用HashSet去除重复数据5. 线程池...
    99+
    2022-12-29
    Java开发人员常犯的错误 Java开发常犯错误
  • Java程序员惯性思维的错误是什么
    本篇内容主要讲解“Java程序员惯性思维的错误是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java程序员惯性思维的错误是什么”吧!有表结构如下: T_SOME_TABLE{ c...
    99+
    2023-06-17
  • Spring常犯的十大错误具体是什么
    这篇文章给大家介绍Spring常犯的十大错误具体是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、错误一:太过关注底层我们正在解决这个常见错误,是因为 “非我所创” 综合症在软件开发领域很是常见。症状包括经常重写...
    99+
    2023-06-19
  • web程序员最容易犯的技术错误有哪些
    本篇内容介绍了“web程序员最容易犯的技术错误有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 为...
    99+
    2022-10-19
  • 写Java程序最容易犯的21种错误是怎样的
    写Java程序最容易犯的21种错误是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。写Java程序最容易犯的21种错误实例分析 1.Duplicated Code   代码...
    99+
    2023-06-03
  • 十个 Linux 新手管理员易犯的错误方便是什么
    这篇文章给大家介绍十个 Linux 新手管理员易犯的错误方便是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。如果您是Linux的新手,那么一些常见错误很可能会给您带来麻烦。提前了解...
    99+
    2022-10-19
  • Java程序最容易犯的错误有哪些呢
    今天就跟大家聊聊有关Java程序最容易犯的错误有哪些呢,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  1.Duplicated Code  代码重复几乎是最常见的异味了。他也是Re...
    99+
    2023-06-03
  • Linux新手容易犯的7个错误是什么
    本篇内容介绍了“Linux新手容易犯的7个错误是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!7. 选择错误的 Linux 发行版Lin...
    99+
    2023-06-16
  • 了解这些常见的编程算法错误,避免在 Java 和 Django 中犯错
    在编程中,算法是非常重要的一部分。一个好的算法可以使得程序运行更加高效、稳定。但是,如果我们犯了一些常见的算法错误,不仅会降低程序的性能,还会导致程序的不稳定甚至崩溃。本文将介绍一些常见的编程算法错误,并且提供一些在 Java 和 Dja...
    99+
    2023-10-09
    函数 django 编程算法
  • Java程序员必知的NumPy库是什么?
    NumPy是一个Python第三方库,用于支持大量的数学和科学计算。它是Python科学计算的基石,为科学计算提供了高效的多维数组操作。NumPy的优点在于它提供了一种高效的数据结构,称为N维数组(ndarray),它可以用于存储和操作大...
    99+
    2023-09-30
    numy linux leetcode
  • Java程序员必知的8大排序是什么
    Java程序员必知的8大排序是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。8种排序之间的关系:1, 直接插入排序(1)基本思想:在要排序的一组数中,假设前面(n...
    99+
    2023-06-17
  • CSS中容易犯的10个错误提示分别是什么
    这篇文章将为大家详细讲解有关CSS中容易犯的10个错误提示分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。即使是CSS高手,也难免在书写CSS代码的...
    99+
    2022-10-19
  • 好程序员Java教程解读JDBC是什么
      好程序员解读JDBC是什么,JDBC简介- JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语...
    99+
    2023-06-02
  • java中的错误是什么
    在Java中,根据错误性质将运行错误分为两大类:错误和异常。 (推荐学习:java课程)Java中的所有异常都是由Throwable类的子类生成的对象,所有的异常类都是Throwable类的子类或子类的子类。Thro...
    99+
    2021-08-15
    java入门 java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作