Java 代码规范,你应该知道的一些工具和用法
从事编程这个行业,你一定被别人说过或者说过别人这句话:代码要规范!求职面试时也能从 JD 上看到这个要求:要有良好的编程习惯。其实都是在讲代码规范(Code Style)这件事情。
每个人都有自己的编程习惯,比如你喜欢 2 个空格数量的行前缩进,而他喜欢 4 个空格数量的行前缩进;你喜欢左大括号位于行尾出,而他喜欢另起一行。等等,这些习惯都没有孰优孰劣之分,只是每个人长期以往形成的个人编程爱好而已。
当你独立开发一个项目时,谈不上代码规范,按照你个人的编程习惯即可。但是,如果是多人协作、共同开发一个项目,如果没有统一的代码规范的话,项目中的每个人都按照自己的习惯率性而为,就会导致整个项目的代码看上去杂乱无章,可读性非常差,并且持续增加后续的维护成本。
所以,在团队协作时,常常会涉及到代码规范。通常,一个公司也会拥有一份统一的代码规范。事实上,根据经验,使用代码规范在一定程度上还能减少 BUG 数量,降低错误率。本篇文章,我们就来讲讲如何在 Android 项目中使用代码规范,主要是 Java 语言的代码规范。
Code Style
代码规范也是因人而异的,或者说因公司而异。之前,我工作的公司,有领导专门使用 word 文档编写一份代码规范,然后同事们仔细阅读,谨记于心,在 Coding 时多加注意。事实上,可以利用 IDE 将代码规范文件配置其中。这样,可以减少大部分凭借记忆解决的难题,实现自动化规范。
关于代码规范文件,一些知名互联网公司也公开有各自的代码规范,这些都是我们可以直接借鉴、拿来使用的优秀资源,当然你也可以再根据自己的情况作出修改。比较出名的有:
这里我们拿 Google 公司提供的 Java 语言代码规范为例,简单描述一下如何使用 Android Studio 配置 Code Style。
首先下载 intellij IDE 对应的配置文件到本地电脑上:
intellij-java-google-style.xml
该文件内容都是一些 xml 配置,这里不妨截取一部分看看:
<?xml version="1.0" encoding="UTF-8"?>
<code_scheme name="GoogleStyle">
<option name="OTHER_INDENT_OPTIONS">
<value>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</value>
</option>
......
</code_scheme>
打开 Android Studio,在 Preferences 界面中找到 Code Style 菜单,选择 Java 语言,点击 Manage 按钮,Import 前面下载好的 xml 配置文件。然后在 Scheme 下拉列表中便可以看到 GoogleStyle 选项,切换即可:
之后,在 Coding 过程中,使用一些快捷键操作,比如格式化、TAB 键等,就会自动按照这份代码规范执行。当然,你也可以修改这份代码规范,前提是你要知道该规范的内容意义。关于这个,Google 也提供有一份在线文档,可供参考:
代码格式化
有了代码规范,便可以直接使用快捷键格式化当前文件的代码,Mac 上默认快捷键为:
Option + Command + L
你也可以直接选择整个项目或某个目录,右键点击 Reformat Code 选项,批量格式化。
当然,还可以下载 Google 提供的格式化 Jar 包,使用命令行工具对指定文件进行格式化操作。GitHub 地址为:
举个例子,批量格式化当前目录下的所有 Java 文件(实际使用时注意修改 jar 文件目录):
find . -name "*.java" -exec java -jar ~/tools/google-java-format-1.3-all-deps.jar -r {} \;
Check Style
有了代码规范和格式化操作,虽然一定程度上能够借助 IDE 规范化我们的代码,但是有些部分还是不能完全约束开发人员。比如,变量命名,你还是可以随意命名;每行代码字符个数你也可以随意书写。这些主观人为的操作,遵守不遵守规范,还是在于你个人。
那么,有没有一种办法检查你写完的代码是否符合某些规范要求呢?答案是肯定的。CheckStyle,自动帮你检查代码是否符合规范的一种插件化工具。
CheckStyle 工具可以帮助你检查 Javadoc 注视文档是否符合规范(比如首行必须以英文句号结束),变量、函数等命名是否符合给定正则表达式,括号、大括号前后留白是否符合规范,等等,这些规范要求都是可以在 xml 文件中自由约定设置的。
CheckStyle 的 GitHub 下载地址为:
https://github.com/checkstyle/checkstyle
也可以使用 Android Studio 在线安装的方式搜索安装:
CheckStyle 的使用需要配合着 xml 检查文件。Google 公司也提供有一份对应 Java 代码规范的检查规则文件和文档说明,检查文件的下载地址请点击:
同样的,你也可以按照自己的需要随意修改。不过最好和你前面使用的 Code Style 文件保持一致。
然后你就可以将这份检查规则文件配置给 CheckStyle 工具,也是在 Preferences 窗口中配置( IDE 中默认也有一套 CheckStyle 规则):
重启 IDE,然后便可以在底部菜单栏中看到 CheckStyle 操作选项:
打开 CheckStyle 窗口,选择前面配置的 google-checkstyle 检查规则文件,点击左边的 Run 按钮,便可以对当前打开的 Java 文件检查规范:
可以看到,不符合规范的地方都有对应行数等提示信息,可以选择并逐一修改。修改完毕,再次执行 Run 操作检查时,如果完全符合 CheckStyle 的话,看到的就是 no problems 提示:
CheckStyle 插件工具的好处是,你能够直接在 IDE 中对项目中的某个 Java 文件检查规范,并且从错误信息处直接定位到相关代码位置,从而很方便地作出修改。还有一个好处是,你可以在编写代码时,实时得到 CheckStyle 的检测提示,如:
可以看到,在编辑区直接提示,方法中的左大括号前面需要使用空格与其他内容隔开。这样,我们在 Coding 的时候就能随时知道当前代码是否符合规范,非常方便。
而 CheckStyle 插件工具不好的地方在于,其不能做到对多个文件批量检查。比如,我想知道某个项目或者某个目录下的 Java 文件是否符合规范,插件就做不到。这个时候,你就可以使用命令行工具了。
下载 CheckStyle 提供的 Jar 包及 xml 规则文件,然后打开命令行工具,输入检查命令即可。如:
java -jar ~/tools/checkstyle-7.8.2-all.jar -c ~/tools/google_checks.xml MainActivity.java
命令行工具的弊端在于没有定位源码的功能,你只能看到当前文件哪里是否符合规范。有关 CheckStyle 的更多使用详情,请参考 在线文档。
事实上,CheckStyle 工具非常适合团队协作开发。比如,管理员可以将 CheckStyle 部署在 SVN 或者 Git 的远程仓库所在的服务器上。如果发现 push 或者 merge 的代码不符合这个规范要求,将拒绝接受。这样,便可以强制团队中的每一个开发人员严格按照规范修改自己的代码,使得整个项目或整个公司的项目代码保持统一的风格。
开源规范
除了前面我们说到的 Google 公司提供的 Check 检查规则文件,还有一些其他知名公司开源的内容可供选择:
其他工具
静态代码分析工具当然不止 CheckStyle 这一个,提高代码质量你还可以使用这些工具:
诸如此类,选择一款适合你自己的就好。工具只是一种手段,提高团队协作效率、保证代码质量才是我们的终极目的。
参考链接
关于代码规范和相关工具的使用,你还可以阅读这些文章:
关于我:亦枫,博客地址:http://yifeng.studio/,新浪微博:IT亦枫
微信扫描二维码,欢迎关注我的个人公众号:安卓笔记侠
不仅分享我的原创技术文章,还有程序员的职场遐想
Java 代码规范,你应该知道的一些工具和用法的更多相关文章
- 转!!Java代码规范、格式化和checkstyle检查配置文档
为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...
- 【转】Java代码规范
[转]Java代码规范 http://blog.csdn.net/huaishu/article/details/26725539
- Java代码规范
Java代码规范 本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改.本文档中没有说明的地方,请参看SUN Java标准代码规范.如果两边有冲突,以SU ...
- Java代码规范、格式化和checkstyle检查配置文档
http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...
- 阿里官方Java代码规范标准《阿里巴巴Java开发手册 终极版 v1.3.0》
终极版 v1.3.0 2017年开春之际,阿里诚意献上重磅大礼:<阿里巴巴Java开发手册>,首次公开阿里官方Java代码规范标准.这套Java统一规范标准将有助于提高行业编码规范化水平, ...
- MyEclipse中阿里JAVA代码规范插件(P3C)的安装及使用
JAVA代码规范插件(P3C)是阿里巴巴2017年10月14日在杭州云栖大会上首发的,使之前的阿里巴巴JAVA开发手册正式以插件形式公开走向业界.插件的相关信息及安装包都可以在GitHub(https ...
- JAVA代码规范笔记(上)
本文为<code conventions-150003>(JAVA代码规范)笔记. 文件组织 1.超过2000行代码的源文件将会比较难以阅读,应该避免. 2.每个Java源文件都包含单一的 ...
- IDEA中阿里JAVA代码规范插件(P3C)的安装及使用
JAVA代码规范插件(P3C)是阿里巴巴2017年10月14日在杭州云栖大会上首发的,使之前的阿里巴巴JAVA开发手册正式以插件形式公开走向业界.插件的相关信息及安装包都可以在GitHub(https ...
- 阿里官方Java代码规范标准
阿里官方Java代码规范标准<阿里巴巴Java开发手册 终极版 v1.3.0>下载 https://www.cnblogs.com/han-1034683568/p/7680354.htm ...
- 阿里官方Java代码规范标准《阿里巴巴Java开发手册》下载
https://bbs.aliyun.com/read/306592.html?page=e 2017年开春之际,诚意献上重磅大礼:阿里巴巴Java开发手册,首次公开阿里官方Java代码规范标准. 这 ...
随机推荐
- JSON and XML Serialization in ASP.NET Web API
https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/json-and-xml-seri ...
- 使用Nginx搭建图片服务器(windows)
知识点:在windows系统中,搭建图片上传服务器 参考博客:http://blog.csdn.net/u010942834/article/details/72953441 1.进入官网下载ngin ...
- 初入spring boot(七 )Spring Data JPA
Spring Data JPA通过提供基于JPA的Repository极大地减少JPA作为数据访问方案的代码量. 1.定义数据访问层 使用Spring Data JPA建立数据访问层十分简单,只需定义 ...
- linux一键安装mysql脚本
#!/bin/sh if [ -s /etc/my.cnf ];then rm -rf /etc/my.cnf fi echo "------------------------------ ...
- ubuntu 18. use gnome-tweaks
<<install gnome-tweaks sudo apt-get install gnome-tweaks <<run gnome-tweaks >>pres ...
- DNS和Bind配置指南
/////////////////////////////目录//////////////////////////////////////一.DNS原理相关二.使用bind搭建最简单的DNS服务器三. ...
- Vue 及框架响应式系统原理
个人bolg地址 全局概览 Vue运行内部运行机制 总览图: 初始化及挂载 在 new Vue()之后. Vue 会调用 _init 函数进行初始化,也就是这里的 init 过程,它会初始化生命周期. ...
- Java String类为什么不可变?
原文地址:# Why String is immutable in Java? 众所周知,String类在Java中是不可变的.不可变类简单地说是实例不可修改的类.对于一个实例创建后,其初始化的时候所 ...
- hdu4318阶梯博弈nim变形
阶梯博弈原理参考:http://www.cnblogs.com/jiangjing/p/3849284.html 这题计算每两个之间的间隔就行了,如果是奇数个就把第一个前面的看作一个,偶数个就是两个点 ...
- Shell_NotifyIcon托盘图标闪烁
之前的同事留下了一个程序会莫名闪退的bug,今天终于发现是托盘图标闪烁使得gdi资源耗尽导致的. 先定义 #include "shellapi.h" //托盘图标引用 NOTIFY ...