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[]) 方法已经定义了, 那么它应该写在类的底部。

(0)

相关推荐

  • C++、C语言和JAVA开发的区别

    1.面向对象没有java彻底. 由于C++要兼容C的内容,而C是面向过程的,所以C++不可避免地出现过程影子,并不算是完全的面向对象的程序设计语言.例如总得要有main或winmain之类的过程吧. 2.C++的移植能力没有java好. 由于C++的事实标准的存在,即各个编译器总存在差异,所以或多或少存 在不兼容.而且各个软件平台的C++启动代码和硬件指令不同,编译后的C++程序一般是不能跨平台的.而java从娘胎里出来就是为了跨平台执行的,不采 用二进制机器码作为最终代码,所以在移植方面较好.

  • PHP和Java的主要区别有哪些?哪个最适合Web开发语言?

    一.前言 PHP和Java都是现在比较流行的二种编程语言. 对于许多新手来说,都会思考如果学的时候,该学哪种语言呢?下面这篇文章给大家整理两者的区别以及一些选择建议,一起来看看吧. 二.简介 PHP与Java作为两种截然不同的程序开发语言,无论是技术层面还是发展空间,亦或是市场份额占比,都有着不同的表现方式,理念上的不同导致了Java和PHP在Web应用开发上显示了不同的结果.若要一定追根到底,深究PHP与Java究竟哪个更好? 简而言之:PHP是一种解释执行的脚本语言,语法和C语言类似,易学易

  • C语言与JAVA的区别是什么(推荐)

    首先来说说他们各自的历史:C语言的发展历史 C语言的发展颇为有趣.它的原型ALGOL 60语言.(也成为A语言) 1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言. 1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言. 1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字"B语言".意思是将CPL语言煮干,提炼出它的精华

  • Java语言简介(动力节点Java学院整理)

    Java 简介 Java是由Sun Microsystems公司(现已被oracle公司收购)于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出,据oracle官方数据指数,目前全球已有上亿的系统是使用Java开发的. Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程

  • Java老矣 尚能饭否?

    22 岁,对于一个技术人来说可谓正当壮年.但对于一门编程语言来说,情况可能又有不同.各类编程语言横空出世,纷战不休,然而 TIOBE 的语言排行榜上,Java 却露出了明显的颓势.这个老牌的语言,未来会是怎样? 写在前面 从 1995 年第一个版本发布到现在,Java 语言已经在跌宕起伏中走过了 22 年,最新的 Java 版本也已经迭代到 Java 9.当年 Java 语言的跨平台优势如今看来也只不过是家常小菜,Go.Rust 等语言横空出世,进一步拓宽了编程语言的边界.当年发明 Java 语

  • 深入Java7的一些新特性以及对脚本语言支持API的介绍

    1.switch条件语句中可以加入字符串了,实现方法是利用了字符串的hashcode()值作业真正的值2.增加了一种可以在字面量中使用的进制,二进制,通过在数字前面加"0b"或"0B"3.在数字字面量中使用下划线来分隔数字方便阅读,不影响数值大小.基本原则是前后都是数字的才可以出现下划线4.java7对异常做了两个改动: 4.1.支持在一个catch子句中同时捕获多个异常,另外一个是在捕获并重新抛出异常时的异常类型更加精确.java7中Throwable类增加add

  • Java基础知识之Java语言概述

    Java语言是SUN(Stanford University Network,斯坦福大学网络公司)公司1995年推出的一门高级编程语言,起初主要应用在小型消费电子产品上,后来随着互联网的兴起,Java语言迅速崛起(Java applet 可以在浏览器中运行),成为大型互联网项目的首选语言. 2009年04月20日,美国甲骨文公司74亿美元收购Sun,取得java的版权. Java 是面向对象的语言,没有面向对象编程经验的读者需要花费不少时间来了解面向对象的概念.语法和编程思想,有不能理解的地方请

  • Java程序与C语言的区别浅析

    Java和C语言虽有相同性,但两者也有一定的不同.Java程序是面向对象的一种简单.分布式 .解释.健壮.安全.结构中立.可移植.高效能.多线程.动态的语言它是面向对象而C语言是面向过程的,这是最大的不同,对于学过C语言的我们来说,Java可以说是比较简单的编程语言. 在Java语言中,所有的变量必须要首先声明,然后才能使用. Java中可以有若干类但有且只有一个public,一个类中至少含有一个main方法,否则程序不能运行.而一个C语言由若干函数构成,其中必须且只有一个main的主函数,程序

  • 8个简单部分开启Java语言学习之路 附java学习书单

    之前为大家推荐了java语言阅读书籍,下面为大家介绍从哪几个方面开始学习java语言,具体内容如下 1. Java语言基础  谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基本没有其它任何一本书可以超越它.该书的作者Bruce Eckel在网络上被称为天才的投机者,作者的<Thinking in C++>在1995年曾获SoftwareDevelopment Jolt

  • 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. 书写

  • Java语言面向对象编程思想之类与对象实例详解

    在初学者学Java的时候,面向对象很难让人搞懂,那么今天小编就来为大家把这个思想来为大家用极为简单的方法理解吧. 首先我们来简单的阐述面向对象的思想. 面向对象: 官方的语言很抽象,我们把官方的解释和定义抛开.想想,自己有什么,对!!我们自己有手脚眼口鼻等一系列的器官.来把自己所具有的器官就可以看作我们的属性,自己是不是可以喜怒哀乐和嬉笑怒骂,这些是不是我们的行为,那么自己的具有的属性加自己有的行为就称为一个对象. 注意!!我们自己,一个个体是一个对象,因为,你是你,我是我,我们虽然有相同的,但

  • Java函数式编程(一):你好,Lambda表达式

    第一章 你好,lambda表达式! 第一节 Java的编码风格正面临着翻天覆地的变化. 我们每天的工作将会变成更简单方便,更富表现力.Java这种新的编程方式早在数十年前就已经出现在别的编程语言里面了.这些新特性引入Java后,我们可以写出更简洁,优雅,表达性更强,错误更少的代码.我们可以用更少的代码来实现各种策略和设计模式. 在本书中我们将通过日常编程中的一些例子来探索函数式风格的编程.在使用这种全新的优雅的方式进行设计编码之前,我们先来看下它到底好在哪里. 改变了你的思考方式 命令式风格--

  • java语言与平台基础知识点

    使用Java之前,我们要先弄清楚Java语言和Java平台之间的区别.然而,有时候不同的作者对语言和平台的构成会有不同的定义,所以人们有时不太清楚两者之间的区别,分不清是语言还是平台提供了代码使用的编程特性. 因为本书的大部分内容都需要你理解两者的区别,所以这里需要说明一下.以下是我们给出的定义. Java语言 在"关于本书"中,我们提到Java语言是静态类型.面向对象的语言,希望你对这种说法已经非常熟悉了.Java语言还有一个非常明显的特点,它是(或者说应该是)人类可读的. Java

  • Java语言的11大特点(Java初学者必知)

    Java简介 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程  . Java具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移植性.多线程.动态性等特点 Java可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等 . Java是一种简单的,面向对

  • 举例解析Java多线程编程中需要注意的一些关键点

    1. 同步方法或同步代码块? 您可能偶尔会思考是否要同步化这个方法调用,还是只同步化该方法的线程安全子集.在这些情况下,知道 Java 编译器何时将源代码转化为字节代码会很有用,它处理同步方法和同步代码块的方式完全不同. 当 JVM 执行一个同步方法时,执行中的线程识别该方法的 method_info 结构是否有 ACC_SYNCHRONIZED 标记设置,然后它自动获取对象的锁,调用方法,最后释放锁.如果有异常发生,线程自动释放锁. 另一方面,同步化一个方法块会越过 JVM 对获取对象锁和异常

  • Java并发编程:volatile关键字详细解析

    volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以重获生机. volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情.由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用vola

随机推荐