Java程序的编码规范
所有的程序开发手册都包含了各种规则。一些习惯自由程序人员可能对这些规则很不适应,但是在多个开发人员共同写作的情况下,这些规则是必需的。这不仅仅是为了开发效率来考虑,而且也是为了后期维护考虑。
一、命名规范
定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)
> Package 的命名
Package 的名字应该都是由一个小写单词组成。
> Class 的命名
Class 的名字必须由大写字母开头而其他字母都小写的单词组成。
> Class 变量的命名
变量的名字必须用一个小写字母开头。后面的单词用大写字母开头。
> Static Final 变量的命名
Static Final 变量的名字应该都大写,并且指出完整含义。
> 参数的命名
参数的名字必须和变量的命名规范一致。
> 数组的命名
数组应该总是用下面的方式来命名:
- byte[] buffer;
而不是:
- byte buffer[];
> 方法的参数
使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:
- SetCounter(int size){
- this.size = size;
- }
二、Java文件样式
所有的 Java(*.java) 文件都必须遵守如下的样式规则:
> 版权信息
版权信息必须在java文件的开头,比如:
- /**
- * Copyright ?2000 Shanghai XXX Co. Ltd.
- * All right reserved.
- */
其他不需要出现在javadoc的信息也可以包含在这里。
> Package/Imports
package 行要在import行之前,import中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果import行中包含了同一个包中的不同子目录,则应该用*来处理。
- package hotlava.net.stats;
- import java.io.*;
- import java.util.Observable;
- import hotlava.util.Application;
这里 java.io.* 使用来代替InputStream and OutputStream的。
> Class
接下来的是类的注释,一般是用来解释类的。
- /**
- * A class representing a set of packet and byte counters
- * It is observable to allow it to be watched, but only
- * reports changes when the current set is complete
- */
接下来是类定义,包含了在不同的行的 extends 和 implements :
- public class CounterSet
- extends Observable
- implements Cloneable
> Class Fields
接下来是类的成员变量:
- /**
- * Packet counters
- */
- protected int[] packets;
public 的成员变量必须生成文档(JavaDoc)。proceted、private和 package 定义的成员变量如果名字含义明确的话,可以没有注释。
> 存取方法
接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。
- /**
- * Get the counters
- * @return an array containing the statistical data. This array has been
- * freshly allocated and can be modified by the caller.
- */
- public int[] getPackets() { return copyArray(packets, offset); }
- public int[] getBytes() { return copyArray(bytes, offset); }
- public int[] getPackets() { return packets; }
- public void setPackets(int[] packets) { this.packets = packets; }
其它的方法不要写在一行上。
> 构造函数
接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。
访问类型 (“public”, “private”等) 和任何“static”,“final”或“synchronized”应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。
- public
- CounterSet(int size){
- this.size = size;
- }
> 克隆方法
如果这个类是可以被克隆的,那么下一步就是clone方法:
- public
- Object clone()
- {
- try {
- CounterSet obj = (CounterSet)super.clone();
- obj.packets = (int[])packets.clone();
- obj.size = size;
- return obj;
- }catch(CloneNotSupportedException e) {
- throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());
- }
- }
> 类方法
下面开始写类的方法:
- /**
- * Set the packet counters
- * (such as when restoring from a database)
- */
- protected final void setArray(int[] r1, int[] r2, int[] r3, int[] r4)throws IllegalArgumentException
- {
- //
- // Ensure the arrays are of equal size
- //
- if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)
- throw new IllegalArgumentException("Arrays must be of the same size");
- System.arraycopy(r1, 0, r3, 0, r1.length);
- System.arraycopy(r2, 0, r4, 0, r1.length);
- }
> toString 方法
无论如何,每一个类都应该定义toString 方法:
- public String toString()
- {
- String retval = "CounterSet: ";
- for (int i = 0; i<data.length();i++){
- retval += data.bytes.toString();
- retval += data.packets.toString();
- }
- return retval;
- }
> main 方法
如果main(String[]) 方法已经定义了,那么它应该写在类的底部。
三、代码编写格式
> 代码样式
代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行) 。
> 文档化
必须用 javadoc 来为类生成文档。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。使用 @author 标记是不被推荐的,因为代码不应该是被个人拥有的。
> 缩进
缩进应该是每行2个空格。不要在源文件中保存Tab字符。在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度。
如果你使用 UltrEdit 作为你的 Java 源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符,方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格,然后用 Format|Tabs to Spaces 菜单将 Tab 转换为空格。
> 页宽
页宽应该设置为80字符。源代码一般不会超过这个宽度,并导致无法完整显示,但这一设置也可以灵活调整。在任何情况下,超长的语句应该在一个逗号或者一个操作符后折行。一条语句折行后,应该比原来的语句再缩进2个字符。
> {} 对
{} 中的语句应该单独作为一行。例如,下面的第1行是错误的第2行是正确的:
- if (i>0) { i ++ }; // 错误, { 和 } 在同一行
- if (i>0) {
- i ++
- }; // 正确, { 单独作为一行
} 语句永远单独作为一行。
如果 } 语句应该缩进到与其相对应的 { 那一行相对齐的位置。
> 括号
左括号和后一个字符之间不应该出现空格,同样,右括号和前一个字符之间也不应该出现空格。下面的例子说明括号和空格的错误及正确使用:
- CallProc( AParameter ); // 错误
- CallProc(AParameter); // 正确
不要在语句中使用无意义的括号。括号只应该为达到某种目的而出现在源代码中。下面的例子说明错误和正确的用法:
- if ((I) = 42) { // 错误 - 括号毫无意义
- if (I == 42) or (J == 42) then // 正确 - 的确需要括号
四、程序编写规范
> exit()
exit除了在main中可以被调用外,其他的地方不应该调用。因为这样做不给任何代码代码机会来截获退出。一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退出。
> 异常
申明的错误应该抛出一个RuntimeException或者派生的异常。
顶层的main()函数应该截获所有的异常,并且打印(或者记录在日志中)在屏幕上。
> 垃圾收集
JAVA使用成熟的后台垃圾收集技术来代替引用计数。但是这样会导致一个问题:你必须在使用完对象的实例以后进行清场工作。比如一个prel的程序员可能这么写:
- ...
- {
- FileOutputStream fos = new FileOutputStream(projectFile);
- project.save(fos, "IDE Project File");
- }
- ...
除非输出流一出作用域就关闭,非引用计数的程序语言,比如JAVA,是不能自动完成变量的清场工作的。必须象下面一样写:
- FileOutputStream fos = new FileOutputStream(projectFile);
- project.save(fos, "IDE Project File");
- fos.close();
> Clone
下面是一种有用的方法:
- implements Cloneable
- public
- Object clone()
原文链接:http://java.chinaitlab.com/base/2375.html
转载于:https://www.cnblogs.com/mixer/archive/2010/07/19/2448812.html
Java程序的编码规范相关推荐
- java 缩进_java编码规范_缩进和注释
1. 缩进排版(Indentation) 4个空格常被作为缩进排版的一个单位.缩进的确切解释并未详细指定(空格 vs. 制表符).一个制表符等于n个空格(视具体的编辑器而定,Eclipse ...
- JAVA简介及其编码规范
Java的发展 Sun公司1995年推出.96发布JDK1.0.19年发布J2SE.J2EE. J2ME.05年.09年被Oracle收购: C/S(Client/Server):需要下载安装本地客户 ...
- java程序日志打印规范
java日志打印规范 一.日志 API 二.日志输出 三.日志配置 V1.0.0_NEW 四.日志性能 五.栈信息打印 一.日志 API 1.[强制]各应用中不可直接使用日志系统(Log4j.Logb ...
- 为什么阿里巴巴Java开发手册编码规范里推荐单个方法的总行数不超过80行
该篇文章参考了: 1. 阿里巴巴<java开发手册>v1.5.0 华山版 2. <码出高效:Java开发手册> 单个方法的总行数不超过80行 在阿里巴巴<java开发手册 ...
- 《阿里巴巴JAVA编码规范》阅读理解
https://github.com/alibaba/p3c/ https://github.com/singgel?tab=repositories 前言 2017 年阿里云栖大会,阿里发布了针对 ...
- Android编码规范_优码客软件
Android编码规范 日期 作者 备注 2013年7月30日星期二 王明东 初稿 前 言 编写本规范的目的是为了进一步规范Android软件编程风格,提高软件源程序的可读性.可 ...
- Java Web安全编码
JAVA Web安全编码规范要求 Java Web安全编码 输入输出数据验证 身份认证和访问控制 文件和资源管理 会话管理 错误和异常信息处理 数据加密 代码质量 序列化 本文转载,如有冒犯请联系本人 ...
- java菱形乱码 编码_【分享】Java开发过程中中文乱码问题总结
一.文件乱码处理 1.文件默认编码:默认使用项目的默认编码 右击文件->Properties->Resource->Text file encoding 2.JSP文件编码:由于JS ...
- 【Python从入门到精通】(三)Python的编码规范,标识符知多少?
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 这是Pyhon系列文章的第三篇,本文主要介绍Python程序的编码规范. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题及需要,欢迎踊跃 ...
- Google 出品的 Java 编码规范,值得借鉴!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 译者:Hawstein 原文:google.github.io/s ...
最新文章
- ios 静态库合成_iOS链接原理解析与应用实践
- 关闭生成调试信息和嵌入清单
- export ,export default 和 import 区别 以及用法
- 服务器能安装ios系统吗,想给iPhone重装iOS,怎能不用iMazing
- Linux下安装部署ElasticSearch教程【7.10.1】
- StringBuilder初始化容量以及扩容机制(源码分析)
- Oracle Spatial中SDO_Geometry说明
- 多个非空文件整合至一个文件
- git回退到历史版本并提交到远程分支
- (二)Python 装饰器
- 29. Element ownerDocument 属性
- 一篇文章告诉你什么是社群运营
- Rockchip | Rockchip U-Boot的获取与构建
- 域名注册查询批量筛选工具
- Kaggle教程 机器学习中级3 分类变量
- NOJ [1509] 挖宝
- Extract - 凤凰牌老熊-现代支付系统设计
- Java 白皮书 —— A White Paper
- 一本通1612特别行动队
- 用Python实现原生爬取某牙直播平台数据