查看原文
其他

今天,我来告诉你如何写出健壮、简洁的Java代码 | 建议收藏

前语:不要为了读文章而读文章,一定要带着问题来读文章,勤思考。在此,建议大家为本公众号加“星标”。如文章写得好,望大家阅读后在右下边“在看”处点个赞,以示鼓励!

来源: http://t.cn/EX3ZPjf


本文根据国外一篇英文技术文来整理所得「略作修改」。


如果你按照这篇文章的提示和技巧来要求自己,我相信你一定能写出简洁、优雅的Java代码。我知道有些读者肯定会很惊讶,但请你相信我,他们是被我证明实践过的。


#1、请使用 IntelliJ IDEA 作为您的集成开发环境


虽然我已经使用了六年的 Eclipse 和三年的 NetBeans,偶尔也会使用到它们,但如今的大部分时间,我只使用 IntelliJ IDEA。我并不是想在这里展开有关 IDE 的大讨论,而只是想告诉您,IDEA 能够根据其自有的最佳整合实践标准,持续提示您写出更短、更健壮、更简洁的代码。


您只需要按下 Alt + Enter 组合键,它就会自动开始为您工作了。在大多数时候,IntelliJ IDEA 能够为您提供各种智能且实用的代码建议。当然,您也可以向它学到不同的编程知识与技巧。另外,推荐使用 IDEA 的快捷键来加快编码速度, IDEA 有很多非常方便的快捷键和功能,用的多了自然就熟悉了!


这里,可以参考我之前的这几篇经典入门文章。


谈谈我与 Intellij IDEA 的故事


Intellij IDEA 中我一直在用的几个插件


为了更好地获取 IDEA 的服务性能,您最好在自己的电脑上使用固态硬盘 「SSD」。就我自己的那台旧式笔记本电脑而言,由于使用的是传统硬盘 「HDD」,它已无法顺畅地运行 IDEA 了。因此我个人建议您至少使用一颗 256 GB 大小的固态硬盘。


还有,如果你买不起key,也可以使用我师弟「很多同学都以为他是黑客,其实那只是他的爱好,他是一名Java程序员^_^」免费提供的注册码,其实他也建议大家用正版,IDEA破解挑战只是他的兴趣,他享受那种每次征服完IDEA后的喜悦。


http://idea.lanyus.com


# 2、使用 JDK 8 或更高版本


JDK 8 及其更高版本引入了很多新的特性,比如:lambda 表达式 、功能接口、流式接口 「Stream APIs」等许多新的功能,这些都有助于您写出更简短、更高性能的 Java 代码。当然,您并不需要去逐一地记住这些功能,因为前面提到的 IDEA 会帮助您在实际编程的过程中,实现这些功能与服务。这也就是我从建好一直在公众号建议各位同学使用 IDEA 的原因。


如果你对 Java8 新特性还不了解的话,可以查看我老早以前在公众号写的文章,虽称不上经典,还算比较可以「什么样的技术文才叫经典,既有深度也有广度,所以牛人的文章,你要多读几遍」。


Java 8系列之瞎说开发语言


Java8系列之 Lambda表达式(一)


Java 8系列之Lambda实践步骤(二)


Java 8系列之 Lambda的函数式接口(三)


# 3、请使用 Maven/Gradle 构建工具


请使用 Maven或 Gradle来管理代码中的依赖关系,以及构建和部署自己的项目。如果您构建的许多基础库需要在许多项目中重用,并且这些库仅在内部使用,则最好引入Nexus。否则,您可以将它们部署到Maven中央存储库。


在这里,我建议你最好要会用这两个构建工具,为什么?因为我是从构建工具 Ant 一路走过来的,当年还真要专人来维护 Ant 脚本,到现在 Maven/Gradle这些智能的构建工具「是个程序员都会用」,完全从当年 Ant 的时代解放出来。你再去看看开源工具,基本上都是青一色的 Maven「如经典的阿里系产品 Dubbo、RocketMQ等」,Gradle「比如经典的Spring」,但是也还是有一些项目在用 Ant「如Tomcat」。


# 4、使用 Lombok


规范你的代码,向setter/getter、ashcode/equals、以及constructors/toString等样板式代码 (boilerplate code) 说拜拜,您只用这个注解@Data 便能搞定一切。Lombok 是一款可以通过简单的注解形式,来帮助开发者简化并消除 Java 代码臃肿的工具。它不但能够减少您的代码编写量,还能够帮助您打理那些生成的字节码。可以参考本公众号的另一篇文章。


工具:IDEA必备的利器Lombok,减少代码冗余神器。


# 5、一定要写单元测试


有的同学会诧异,单元测试真的如此重要吗?


我的答案,是的,很重要。就以目前我司为例,代码覆盖率必须要达到85%以上才能提测,要上线代码覆盖率要达到95%,否则,是过不了的。


为什么很重要?


因为可测试的代码通常意味着在组织结构上具有更合理、更简洁的代码质量,它会驱使您去事先管理好各个类之间的关系、各种方法的访问级别、以及其他方面。我甚至发现,即使是最小的单元测试也能够促进更快、更便捷的开发进程,进而能够让自己写出更加短、平、快的 Java 代码。


当然在现实开发工作中,您总会听到一些诸如「我根本没有时间来编写单元测试」或「项目时间节点将至,不要浪费时间写单元测试了」之类的反对意见。这些听起来貌似很合理,但是根据我的经验,在多数情况下,事实并非如此。


如果您没有时间去编写单元测试,那您是否有更多的时间,去修复代码中那些可见、或不可见的 bug 呢?如果跳过了单元测试,那些仓促完成的代码将无法保证稳定性。特别对于一些新的代码变更而言,您完全无法通过及时的反馈途径,知晓那些新产生的代码是否存在着错误隐患,是否会在将来运行的某个特定场景中产生不可预知的异常问题。


一般而言,Junit 和 TestNG 是两款非常优秀的 Java 应用、及单元测试框架。而我个人则更喜欢使用 TestNG「其实这里再给大家推荐一款模拟利器 powermock」。


# 6、重构「常见,但也很慢」


优美简洁的Java代码从来都不是一次写好的,需要您进行反复地改进,你不信,去 Github 上面下载一个经典的开源项目,输入 git logs,便一目了然。


一般来说,通过逐行进行代码重构、和运行各种测试用例,您可以确保自己的更改不会破坏原有代码的正确功能。


同样,IDEA 极大地提供了对于代码重构的支持,其中包括提取方法、重命名、内联 (inline) 等功能,这里可以好好读读我写的文章「很多同学都说经典」。


用 IDEA 跟踪 Java 源码的技巧 | 内部资料


当然,如果您对代码重构是什么,以及它的作用不太了解的话,可以参考Martin Fowler 的经典著作《重构:改善既有代码的设计》,反正我的书架上有收藏本书。



我曾转载过一篇关于朋友江南白衣的经典书单。


一份不错的Java架构师书单 | 鼎力推荐


# 7、定期联络客户,以获取他们的反馈


老实说,这一点可能是最重要的,客户花钱让您通过编写代码,来解决他们的问题、满足他们的需求、并解决他们的痛点。然而,您可能在不知不觉中花费了太多的时间,去实现自以为重要、却对客户无关紧要的特殊功能,进而忽略了代码整体的健壮性和可维护性。那么,我们怎么才能够尽早地发现该问题呢?请保持与客户经常联系,以尽早地获取他们的反馈。


话说回来,知易行难,即使是富有经验的产品经理也不一定能在较短的时间内领悟需求的真谛,何况是那些满脑子只注重功能实现的“码农”们呢?


因此,一个实用的建议是,如果您不能直接联络到最终用户的话,请尽量与该系统的产品经理、或运维人员进行礼貌、且频繁的沟通。磨刀不误砍柴工,这些时间的投入对于后期时间的节省是绝对值得的。


# 8、程序员也该懂点安全


自从建立本公众号以来,我一直在说,大多数的安全漏洞都是开发者的不良习惯引起的,不注重有输入的地方,总以为用户都会按规矩出牌,也许就因为你的一个小错误,让那些灰产、黑产赚的盆满钵满。


之前,跟360等大厂做安全的几个好朋友聊安全,咱们总结了一句很经典的话,与本号的读者共勉,「有输入的地方便有江湖」。


最后,来分享几篇很早以前写的关于Java安全的文章。


以Java的视角来聊聊SQL注入


你的 Java web 配置安全吗?


站在Java的视角,深度分析防不胜防的小偷——“XSS”


# 总结


记住,在编程的这条道路上,没有大神,咱们都是学生。


要想写出简洁、清晰、健壮的代码,你就得掌握上面这8点建议,愿各位同学能与我一起,从现在起,严格要求自己,在编码这条道路上能走的更久一点。


最后,如果本文对你有帮助,麻烦转发一下。


---END---


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存