JAVA语言编程格式高级规范
作为一位开发人员,都要有严格的代码规范。为此我总结了一些代码规范案例。
目 录
1. 前言
2. 试用范围
3. JAVA命名规范--
3.1 公共约定
3.2 Java文件、包
3.3 类、接口命名规范
3.4 方法命名规范
3.5 常量
3.6 变量和参数
3.7 组件/部件
3.8 集合
3.9 神秘的数
3.10 其他
3.11 Java异常
3.12 数组命名
3.13 数据库表命名规则
3.14 数据库字段命名规则
3.15 JSP文件命名
3.16 Servlet类命名
4. 书写格式规范
4.1 缩进
4.2 空格
4.3 对齐
4.4 空行
4.5 注释
5. 代码文件风格
1. 前言 为确保系统源程序可读性,从而增强系统可维护性,兹制定下述编程规范,以规范系统各部分编程。系统继承的其它资源中的源程序也应按此规范作相应修改。 2. 试用范围 本文档将作为河北邮政应用系统软件(JAVA语言)开发的编程格式规范。在系统的编码、测试及维护过程中,要求严格遵守。 3. JAVA命名规范 3.1 公共约定 命名指系统中对源文件名、方法、目录、包、数据库表名、数据库字段等的命名。 系统所用的命名都使用英文缩写来表达。 命名的组成方式为:前缀+{命名词素缩写},前缀表达出命名的用途,如数据库表等。 命名的前缀由项目组确定。 除系统公共维护对象外的其他对象,命名全部用小写。一种方式用“_”作连接符,另一种方式是词素的第一个字母大写直接连接在一起。在本规范中,数据库名、数据库字段名采用第一种方式,其余采用第二种方式。 使用可以准确说明变量/字段/类/接口/包等的完整的英文描述符。例如,采用类似 firstName,listAllUsers 或 CorporateCustomer 这样的名字,严禁使用汉语拼音及不相关单词命名,虽然Java支持Unicode命名,但本规范规定对包、类、接口、方法、变量、字段等不得使用汉字等进行命名 采用大小写混合,提高名字的可读性。一般应该采用小写字母,但是类和接口的名字的首字母,以及任何中间单词的首字母应该大写。包名全部小写。 尽量少用缩写,但如果一定要使用,当使用公共缩写和习惯缩写等,如实现(implement)可缩写成impl,经理(manager)可缩写成mgr等,具体参看下表,严禁滥用缩写。 避免使用长名字(最好不超过 25 个字母)。
避免使用数字,但可用2代替to,用4代替for等,如:go2Jsp。
3.2 Java文件、包 文件名当与其类严格相同,所有单词首字母大写。 包名一般以项目或模块名命名,少用缩写和长名,一律小写。 基本包:com.czpost,所有包、文件都从属于此包。 包名按如下规则组成: [基本包].[项目名].[模块名].[子模块名]... 如: com.czpost.eims com.hepost.eims.until„ 不得将类直接定义在基本包下,所有项目中的类、接口等都当定义在各自的项目和模块 包中。
3.3 类、接口命名规范 所有单词首字母大写。使用能确切反应该类、接口含义、功能等的词。一般采用名词。 接口可带I前缀或able、ible、er等后缀。
3.4 方法命名规范 方法的命名应采用完整的英文描述符,大小写混合使用:所有中间单词的第一个字母大写。法名称的第一个单词常常采用一个有强烈动作色彩的动词。 取值类使用get前缀,设值类使用set前缀,判断类使用is(has)前缀。 例: getName() setSarry() isLogon() 方法参数建议顺序:(被操作者,操作内容,操作标志,其他⋯) 例:public void replace(String sourceStr, String oldStr, String newStr) { ........ }
3.5 常量 采用完整的英文大写单词,在词与词之间用下划线连接,如:DEFAULT_VALUE
3.6 变量和参数 变量建议采用匈牙利命名法,词素规则见“公共约定” 整型变量(包括int,short,long):以 n 开头,例如:long nCredNum; 浮点型变量(包括float,double):以 f 开头,例如:double fTranAmt; 字符变量:以 c 开头,例如:char cPageFlag; 日期型变量:以d开头,例如:date dToday; 布尔型变量:以is开头,例如:boolean isFlag; 字符串变量:以 s 开头,例如:char sPageNo[2+1]; 全局变量:以g开头结合数据的类型,例如:char gsBankNo[10+1]; 静态变量:静态变量在文件中同样是全局变量,命名规则同全局变量。 系统级变量:系统级变量同样是全局变量,以 ‘_’开头结合数据的类型。 例如:char _sBankNo[10+1] 没有‘g’。 临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型。
3.7 组件/部件 应采用完整的英文描述符命名组件(接口部件),遵循匈牙利命名法则 如:btnOK,lblName。 按钮变量 btn+Xxxxxxx 例如:btnSave, btn Exit, btnPrint等 题标变量 lbl+Xxxxxxxx 例如:lblName, lblSex等 对象类型 前缀 Canvas cvs CheckBox chk Image img List lst Choice chc Dialog dlg Event evt Frame frm Menu menu Panel pnl TextArea txa TextField txf
3.8 集合 一个集合,例如数组和矢量,应采用复数命名来表示队列中存放的对象类型。命名应采用完整的英文描述符,名字中所有非开头的单词的第一个字母应大写,适当使用集合缩写前缀。如: Vector vProducts = new Vector(); //产品向量 Array aryUsers = new Array(); //用户列表
3.9 神秘的数 程序里经常会用到一些量,它是有特定的含义的,把神秘的数定义为一个常量。注意这个常量的命名应该能表达该数的意义,并且应该全部大写,以与对应于变量的标识符区别开来。例如50这个数,可以定义为一个名为NUM_OF_EMPLOYEES的常量来代替。
3.10 其他 命名时应使用复数来表示它们代表多值。如:orderItems。
3.11 Java异常 异常类名由表示该异常类型的单词和Exception组成,如ActionException。 异常实例一般使用e、ex等,在多个异常时使用该异常名或简写加E,Ex等组成,如: SQLEx ActionEx
3.12 数组命名 数组应该总是用下面的方式来命名: byte[] buffer; 而不是 byte buffer[];
3.13 数据库表命名规则 前缀与命名词素间用下划线分隔。 命名由小写字母组成。 命名词素如果由单一词组成,可用全拼;如果是多词组成,用缩写。缩写间用下划线。 例如: 库表:以‘t_’开头 视图:以‘v_’开头 库表索引:以‘t_’开头, 以‘_idx’结尾 库表唯一索引:以‘t_’开头,以‘_uidx’结尾
3.14 数据库字段命名规则 命名词素如果由单一词组成,可用全拼;如果是多词组成,用缩写。缩写间用下划线。 命名由小写字母组成。 没有前缀。
3.15 JSP文件命名 采用完整的英文描述说明JSP所完成的功能,尽可能包括一个生动的动词,第一个字母小写,如:viewMessage.jsp、editUser.jsp或者forumChooser.jsp等。
3.16 Servlet类命名 一般对应于所服务的对象加后缀Service来命名,如:UserService,TradeService等。
4. 书写格式规范 严格要求书写格式是为了使程序整齐美观、易于阅读、风格统一,程序员对规范书写的必要性要有明确认识。建议源程序使用eclipse工具开发,格式规范预先在工具中设置。
4.1 缩进 缩进建议以4个空格为单位。预处理语句、全局数据、标题、附加说明、函数说明、标号等均顶格书写。语句块的"{"、"}"配对对齐,并与其前一行对齐,语句块类的语句缩进建议每个"{"、"}"单独占一行,便于匹对。sclipse 中的默认方式是开始的"{"不是单独一行,建议更改成上述格式。
4.2 空格 原则上变量、类、常量数据和函数在其类型,修饰名称之间适当空格并据情况对齐。关键字原则上空一格,如:if ( ... ) 等。运算符的空格规定如下:"::"、"->"、"["、"]"、"++"、"--"、"~"、"!"、"+"、"-"(指正负号)、"&"(引用)等几个运算符两边不加空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符"?:"两边均加一空格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。","运算符只在其后空一格,需对齐时也可不空或多空格。不论是否有括号,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。个人认为此项可以依照个人习惯决定遵循与否。
4.3 对齐 原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在","处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。 变量定义最好通过添加空格或TAB键形成对齐,同一类型的变量最好放在一起。如下例所示: int nValue; int nResult; int nLength;
4.4 空行 不得存在无规则的空行,比如说连续十个空行。程序文件结构各部分之间空一行,由于每个函数还要有函数说明注释,故通常只需空一行或不空,但对于没有函数说明的情况至少应再空一行。对自己写的函数,建议也加上“//------”做分隔。函数内部数据与代码之间应空至少一行,代码中适当处应以空行空开,建议在代码中出现变量声明时,在其前空一行。类中四个“p”之间至少空一行,在其中的数据与函数之间也应空行。
4.5 注释 注释是软件可读性的具体体现。程序注释量一般占程序编码量的20%,软件工程要求不少于20%。程序注释不能用抽象的语言,类似于"处理"、"循环"这样的计算机抽象语言,要精确表达出程序的处理说明。避免每行程序都使用注释,可以在一段程序的前面加一段注释,具有明确的处理逻辑。 注释必不可少,但也不应过多,不要被动的为写注释而写注释。以下是四种必要的注释: 标题、附加说明。 函数、类等的说明。对几乎每个函数都应有适当的说明,通常加在函数实现之前,在没 有函数实现部分的情况下则加在函数原型前,其内容主要是函数的功能、目的、算法等说明,参数说明、返回值说明等,必要时还要有一些如特别的软硬件要求等说明。公用函数、公用类的声明必须由注解说明其使用方法和设计思路,当然选择恰当的命名格式能够帮助你把事情解释得更清楚。 在代码不明晰或不可移植处必须有一定的说明。 及少量的其它注释,如自定义变量的注释、代码书写时间等。
5. 代码文件风格 所有的 Java(*.java) 文件都必须遵守如下的样式规则: 文件生成 对于规范的 JAVA 派生类,尽量用 eclipse工具来生成文件格式,避免用手工制作的头文件/实现文件。 package/import package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。 package hotlava.net.stats; import java.io.*; import java.util.Observable; import hotlava.util.Application; 这里 java.io.* 使用来代替InputStream and OutputStream 的。 文件头部注释 文件头部注释主要是表明该文件的一些信息,是程序的总体说明,可以增强程序的可读性和可维护性。文件头部注释一般位于 package/imports 语句之后,Class 描述之前。要求至少写出文件名、创建者、创建时间和内容描述。其格式应该尽量约束如下: /** *Title: 确定鼠标位置类 * Description: 确定鼠标当前在哪个作业栏位中并返回作业号 * @Copyright: Copyright (c) 2002 * @Company: HIT * @author: rivershan * @version: 1.0 */ 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[]) 方法已经定义了, 那么它应该写在类的底部。
JAVA语言编程格式高级规范的更多相关文章
- Java语言编程 - 搭建Java开发环境
2.1 JDK.JRE和JVM关系 要弄清楚JDK.JRE和JVM这三者之间的关系,先看如下图,有个感性的认识: JDK:Java Development ToolKit(Java开发工具包).JDK ...
- Java语言编程 - Java历史简介
1.1 Sun公司 介绍Java的历史之前,先介绍一下Java语言的缔造公司,Sun公司,Sun公司的全称是:Stanford University Network.值得一提的是,Sun公司从1982 ...
- JAVA语言编程思维入门
Java语言是一门强数据类型语言,也就是所有的数据有自己的数据类型,不能搞混淆.比如整数int 字符串String 不能用int a="字符串123";这样写是错的,因为数据类型不 ...
- java语言编程使用正则表达式来实现提取(美团 3-5年经验 15-30k 北京 hadoop高级工程)中的3-5和15-30
不多说,直接上干货! 如有这样的一条数据进来: 美团 3-5年经验 15-30k 北京 hadoop高级工程 //正则表达式提取工资值,因为15-30k后面有k,3-5年经验,不干净 public ...
- java语言编程实现两个时间相差多少天、多少小时、多少分、多少秒
不多说,直接上干货! DateDistance.java package zhouls.bigdata.DataFeatureSelection.test; import java.text.Date ...
- Java语言编程 - Java第一个程序HelloWorld
3.1 新建Java文件 首先新建一个文件夹,用于存放写的Java程序,例如我存放Java程序的位置为” D:\Files\code\java”. 在该文件夹中,右键新建一个文本文档 将文件名重命名为 ...
- JavaSE学习总结(三)——Java语言编程练习、格式化字符与常量
一.变量.常量.字面量 package com.zhangguo.chapter2_3; /** * 1.银行利率为5%,问存款100美元5年的收益细节? * */ public class P1 { ...
- java数据库编程之高级查询
第三章:高级查询(-) 3.1:修改表 3.1.1:修改表 语法: Alter table <旧表名> rename [ TO] <新表名>; 例子:Alter table ` ...
- java语言编程入门
1 概述 1.1 计算机 计算机包括硬件和软件两部分.硬件包括计算机中可以看得见的物理部分.软件提供看不见的指令.这些指令控制硬件并且使得硬件完成特定的任务. 1.2 程序设计 定义:创建(或开发软件 ...
随机推荐
- 【Codeforces 1114A】Got Any Grapes?
[链接] 我是链接,点我呀:) [题意] 水题 [题解] 哪个比较挑剔优先给他选>_< [代码] import java.io.*; import java.util.*; public ...
- [bzoj4025]二分图_LCT
二分图 bzoj-4025 题目大意:给定一个n个节点的图,m条边,每条边有一个产生时间和一个删除时间,询问所有时间点是否是连通图. 注释:$1\le n\le 10^5$,$1\le m\le 2\ ...
- SpringMVC项目
一.说明该项目是为了演示SpringMVC框架中涉及到的一些知识点,相对独立,掌握这些,基本上就能够解决工作中遇到的一些问题.整个项目的构建规划如下: 1.创建一个标准的Maven Web项目;2.使 ...
- firedac的数据序列和还原单元(Data.FireDACJSONReflect.pas)之拷贝FIREDAC数据集
使用流做中转 procedure CopyDataSet(const ASource, ADest: TFDAdaptedDataSet);var LStream: TStream;begin LSt ...
- Clojure:解决Selmer与AngularJS的 标签混淆问题
Selmer是Clojure的一个模板类库,下面是它的一个DEMO模板: <ul> {% for item in items %} <li>{{item}}</li> ...
- Android学习之6.0系统执行时权限设置
今天讲讲工作中遇见的6.0运行时权限处理问题.起因就是设置版本号更新时,在6.0系统会报错,起因就是6.0动态权限设置,由于在google为了安全考虑,对于一些特定权限会征询客户授权,这当然会大大添加 ...
- (IT/互联网行业)你给自己当前的职位拼几分?(评分标准,个人看法,勿喷~)
常常有身边的关系好的朋友或网友.问如今我该不该跳槽的问题. 我一般给他们的答复你能给当前的工作拼几分. 下面是我自己总结的一个评分标准.如有不当之处,勿喷~ --------------------- ...
- Atom编辑器折腾记_(15)JS代码片段补全(插件:javascript-snippets)
题外话 这款插件就比較重量级了-.用熟悉了写原生JS的效率要提升非常多--并且,不仅支持JS还包括了nodejs snippet javascript-snippets 插件作者: zenorocha ...
- 表现与数据分离;前台MVC
无意间看到一个web前端招聘要求:表现与数据分离 这名词对我非常陌生,我就去百度了下 由于有各种莫名其妙的需求,所以才会出现我们前端MVC这样的莫名其妙的东西... 我们的html就是model,我们 ...
- Extjs 3 控制Grid某行某列不可编辑
var cmGoodsFee = new Ext.grid.ColumnModel([rmGoodsFee, { header : "id", tooltip : "id ...