Java开发编程的坑有哪些

这篇文章主要讲解了“Java开发编程的坑有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java开发编程的坑有哪些”吧!

创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、网站建设、台山网络推广、小程序开发、台山网络营销、台山企业策划、台山品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供台山建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

随处可见的 Null 值

我见过很多的代码会把 Null 值作为返回值,当你预期是一个字符串时,意外得到了一个 Null 值;当你预期得到一个 List 时,意外又得到了一个  Null 值,如果你不进行处理,那么你还会意外得到 NullPointerException. 就像下面这样。

// 情况1 String userTag = getUserTag(); if (userTag.equals("admin")) { // NullPointerException    // ... }  // 情况2 List carList = getCarList(); for (String car : carList) { // NullPointerException     // ... }

为了防止这种情况,你可以在 List 返回时给出一个空的集合而不是 Null,如果是字符串,你可以把要确定有值对象放在比较的前面。

if ("admin".equals(userTag)) {     // ... } // 或者 if (Objects.equals(userTag,"admin")){     // ... }

没有进行空值检查

可能你考虑到了上面的 Null 值情况,但是在实际处理时没有考虑空值情况,比如字符空串空串 "",或者集合为空。那么在后续处理时又有可能得到一个  NullPointerException. 所以你应该进行空值判断。

String userTag = getUserTag(); if (userTag != null && userTag.trim() != "") {     // ... }  List carList = getCarList(); if (carList != null && !carList.isEmpty()) {     // ... }

忽略的异常处理

异常处理总是一件烦人的事,而忽略异常似乎总有一种吸引人的魔力。我见过像下面这样的代码。

try {     List result= request();     // ... }catch (Exception e){  }

你没有看错,catch  中没有任何内容,后来出现了问题,看着日志文件一片太平无迹可寻。异常是故意抛出来的,你应该正确处理它们或者继续抛出。而且同时,你该输出一行日志用来记录这个异常,方便以后的问题追踪。

没有释放资源

在读取文件或者请求网络资源时,总是需要进行 close 操作,这很重要,否则可能会阻塞其他线程的使用。但是初学者可能会忘记这一步操作。其实在 Java 7  开始,就提供了 try-with-resources 自动关闭资源的特性,只需要把打开的资源放入 try 中。

try (FileReader fileReader = new FileReader("setting.xml")) {     // fileReader.read();     // ... } catch (Exception e) {     e.printStackTrace(); }

像上面这样,不需要在 finally 里手动调用 fileReader 的 close 方法关闭资源,因为放在 try 里的资源调用会在使用完毕时自动调用  close. 而且不管是否有异常抛出,这很实用。

ConcuretModificationException

总有一天你会遇到 ConcuretModificationException  ,然后开始百度搜索它的解决方式,这个异常最常见的场景是你在遍历一个集合时进行更新操作,比如像下面这样。

List list = new ArrayList<>(); list.add("a1"); list.add("b1"); list.add("b2"); list.add("c1"); for (String s : list) {     if ("b1".equals(s)) {         list.remove(s);     } }

这个异常很有用处,因为 ArrayList  不是线程安全的集合,假设你这边一边遍历,另一个线程不断更新,非线程安全集合会导致你的遍历结果不正确,所以这个异常的存在是合理的。同理 HashMap  也是如此

缺少注释

准确的注释可以救人于水火,这点有时候一点也不夸张。虽然说优秀的代码本身就是非常好的注释,但是这实际开发起来,很少发生。注释并不需要你事无巨细的一一记录,但是你该在核心逻辑添加应有的注释,比如复杂逻辑的实现思路,当前逻辑业务需求。某个判断的添加原因,某个异常的发生情况等等。这可以让你在未来的某一天需要回看现在的代码时感谢自己。更可以让你在某天的甩锅中轻松胜出。

不进行代码测试

我见过有些同事在功能开发完毕后直接扔给对接同事使用,而自己却没有经过任何测试,或者只是测试了某个简单的情况。测试是开发过程中的重要环节,没有经过严格测试的代码很难说没有问题,我觉得在功能开发完毕后至少需要单元测试,特殊用例测试,集成测试以及其他形式的测试。严格的测试不仅可以第一时间发现问题,更可以减少后面不必要的对接调试时间。

重复造轮子

你知道的,Java 社区非常活跃,存在着大量的第三方类库,开源作者可能花费了数年时间去维护和完善类库,这些类库非常优秀。同时 JDK  也提供了大量的常用的功能封装。这些都可以为我们的开发速度插上翅膀。所以,当你需要一个功能时候,应该首先看下 JDK  和已经引入的类库中是否已经存在相同功能,而不是自己重复造轮子,而且大部分情况下你造的轮子还不如别人好。

下面举些例子。

  • 你需要日志记录,可以使用 logback.

  • 你需要网络操作,可以使用 netty.

  • 你需要解析 JSON,可以使用 gson.

  • 你需要解析表格,可以使用 apache poi.

  • 你需要通用操作,可以使用 apache commons.

另外一种情况是,你可能不知道某个功能在 JDK 中已经实现,这时候你应该多多查看 JDK Document. 我就在工作中见到过同事手写字符串  split,为了获取时间戳把 Date 对象转换到 Calendar.

缺少必要的沟通

这个部分是和开发没有关系的,但是这个环节往往会影响最终的开发结果。进行具体的开发之前,你应该详细的沟通并理解功能的需求,这样你才能针对具体的需求写出不偏离实际需要的代码。有时候你很有可能因为缺少必要的沟通,错误了理解了需求,最终在开发完毕后发现自己写的功能完全没有用处。

没有代码规范

代码规范性非常重要,如果一个项目里充斥着各种稀奇古怪的代码规范,会让维护者十分头疼。而且软件行业高速发展,对开发者的综合素质要求也越来越高,优秀的编程习惯也可以提高软件的最终质量。比如:标新立异的命名风格挑战阅读习惯;五花八门的错误码人为地  增加排查问题的难度;工程结构混  乱导致后续项目维护艰难;没有鉴权的漏洞代码易被黑客攻击;质量低下的代码上线之后漏洞百出等等。因为没有统一的代码规范,开发中的问题可能层出不穷。

下面简单列举些应该统一的开发规范。如命名风格如何是好;常量名称结构怎样;代码格式怎么统一;日期时间格式如何处理;集合处理注意事项;日志打印有无规范;前后交互具体规约等。

感谢各位的阅读,以上就是“Java开发编程的坑有哪些”的内容了,经过本文的学习后,相信大家对Java开发编程的坑有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


当前名称:Java开发编程的坑有哪些
网页URL:http://hbruida.cn/article/gjggde.html