java代码规范

前言

随着软件产品的功能增加和版本升级,程序代码越来越复杂,源文件也越来越多,对程序开发人员来说,除了保证程序运行的正确性和提高代码的运行效率之外,规范风格的编码会对软件的升级、修改、维护带来极大的方便,也保证程序员不会陷入“代码泥潭”中无法自拔。开发一个成熟的软件产品,除了有详细丰富的开发文档之外,还必须要求程序员在编写代码的时候有条不紊、细致严谨。

对于大规模软件产品的开发,程序代码量庞大,这么大的工作量显然需要多个程序员密切配合才能完成。 在此期间, 程序员之间必须阅读相互的代码, 这时候代码编写规则就非常重要了。一段优秀的程序代码,不仅要准确高效的实现功能, 而且要浅显易懂。 这样不仅交流方便,而且易于调试排错。当代码量到达一定的规模, 出现错误几乎是不可避免的事,但如果按照合理的编程规范工作, 可以把错误的出现可能有效的降低, 而且在万一的情况下也能很快的发现和排除。

一个好的程序编码习惯会给整个系统带来极大的便利和优势,为以后系统的调试、升级、维护提供方便,同时,在视觉上来看,系统代码整齐伐一、便于别人理解,形成一种优良的程序书写风格。

良好的设计能带来最大的回报。简言之,对于一个特定的问题,通常会花较长的时间才能找到一种最恰当的解决方案。但一旦找到了正确的方法,以后的工作就轻松多了,再也不用经历数小时、数天或者数月的痛苦挣扎。我们的努力工作会带来最大的回报(甚至无可估量)。而且由于自己倾注了大量心血,最终获得一个出色的设计方案,成功的快感也是令人心动的。坚持抵制草草完工的诱惑——那样做往往得不偿失。

 

本规范适用于利用Java进行软件程序开发的人员。

2. 程序注释

2.1 类注释

类注释一般是放在源文件头部的一段文档,类注释用来简要说明该类的作用和功能,包括作者名称,编写日期、修改日期、修改人等信息,有时还可以加入版权信息;格式应采用“/* */”对的形式,注释内容一般应使用简短的中文,格式如下:

/*****************************************************

类名称:

功能描述:

作    者:

编写日期:

修改记录:

版  权:

****************************************************/

 

 

2.2 接口注释

接口注释用来简要说明该接口所实现的功能,包括接口名称、接口功能描述,接口实现的公用方法;格式采用“/* */”对的形式,注释内容一般应尽量使用能表现该接口最确切含义的简短的中文,格式如下:

/*****************************************************

接口名称:

功能描述:

作    者:

编写日期:

修改记录:

****************************************************/

 

2.3函数注释

函数注释用来简要说明该函数所实现的某项具体的功能,包括函数名称、函数功能描述、输入、输出参数、函数返回值和异常等信息;格式采用“/* */”对的形式,注释内容一般应尽量使用能表现该函数最确切含义的简短的中文,格式如下:

/*

函数名称:

功能描述:

输入参数:

输出参数:

函数返回:

抛出异常:

作    者:

编写日期:

修改记录:

*/

函数注释的位置应放在函数定义之前。

 

2.4常量、变量注释和代码行注释

在程序代码中,对于一些重要的常量、变量和关键的代码行旁应加入适当的注释,使代码具有良好的可读性、更易让人理解;对于单行的注释采用“//”的形式,如果注释比较多超过一行应采用“/* */”对的形式进行注释。

 

2.5注释书写事项

a、注释要简单明了;

b、边编写代码边注释,修改代码时先将原代码行注释了,再加上修改的代码和注释;

c、在必要的地方注释,注释量要适中,注释的内容要清楚、明了、含义准确,避免出现注释二义性,保持注释与其描述的代码相邻(代码就近原则);

d、对代码的注释应放在其上方相邻位置,不可放在下面;

e、变量、常量的注释应放在其上方相邻位置或右方;

f、一目了然的语句不必加注释;

 

3. 命名规则

代码中所包含的非关键字的定义和命名必须统一格式,其中包括:包、类、接口、常量、变量、函数、函数参数、异常等都必须遵守以下命名规则:

类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如:
ThisIsAClassName
thisIsMethodOrFieldName
若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母。这样便可标志出它们属于编译期的常数。
Java包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此。对于域名扩展名称,如com,org,net或者edu等,全部都应小写(这也是Java 1.1和Java 1.2的区别之一)。

 

4. 类编码事项

a、为了常规用途而创建一个类时,请采取“经典形式”,并包含对下述元素的定义:

equals()
hashCode()
toString()
clone()(implement Cloneable)
implement Serializable

b、使类尽可能短小精悍,而且只解决一个特定的问题。下面是对类设计的一些建议:
■一个复杂的开关语句:考虑采用“多形”机制
■数量众多的方法涉及到类型差别极大的操作:考虑用几个类来分别实现
■许多成员变量在特征上有很大的差别:考虑使用几个类

c、任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从而改善编码及维护工作

d、涉及构建器和异常的时候,通常希望重新丢弃在构建器中捕获的任何异常——如果它造成了那个对象的创建失败。这样一来,调用者就不会以为那个对象已正确地创建,从而盲目地继续。

e、在构建器内部,只进行那些将对象设为正确状态所需的工作。尽可能地避免调用其他方法,因为那些方法可能被其他人覆盖或取消,从而在构建过程中产生不可预知的结果

f、对于自己创建的每一个类,都考虑置入一个main(),其中包含了用于测试那个类的代码。为使用一个项目中的类,我们没必要删除测试代码。若进行了任何形式的改动,可方便地返回测试。这些代码也可作为如何使用类的一个示例使用。

5. 函数编码事项

g、函数的规模尽量限制在200行以内;

h、一个函数最好只完成一件功能;

i、为简单功能编写函数;

j、函数的功能应该是可以预测的,也就是说,同样的输入数据应该产生相同的输出;

k、要处理好函数中应抛出的异常;

l、检查函数所有输入参数的有效性;

 

6. 其它事项

a、尽量使用interfaces,不要使用abstract类。若已知某样东西准备成为一个基础类,那么第一个选择应是将其变成一个interface(接口)。只有在不得不使用方法定义或者成员变量的时候,才需要将其变成一个abstract(抽象)类。接口主要描述了客户希望做什么事情,而一个类则致力于(或允许)具体的实施细节。所有变量在调用前必须被初始化,特别是指针变量;

b、 让一切东西都尽可能地“私有”——private。若只公布自己必须公布的,就可放心大胆地改变其他任何东西。在多线程环境中,隐私是特别重要的一个因素——只有private字段才能在非同步使用的情况下受到保护。

c、为避免编程时遇到麻烦,请保证在自己类路径指到的任何地方,每个名字都仅对应一个类。

 

7. 书写规则

a、同层次的代码行,在代码行前应至少保留一个Tab的缩进量;同一层次的代码行应保持相同的缩进量;

b、关键字和操作符之间加适当的空格;

c、相对独立的程序块与块之间加适当的空行;

d、不允许把多个语句写成一行,即一行只写一条语句;

e、函数或方法的开始、循环、判断等语句中的代码要采用缩进风格;

f、Java语言是用大括弧‘{’和‘}’界定一段程序代码块的,编写程序代码块时,‘{’和‘}’应各自占一行并位于同一列,同时与引用他们的语句左对齐。

 

8. 书写范例

/***************************************************************

 

类名:NetTool (注意:在JAVA语言中大小写敏感)

功能:在Java编程时时,经常会需要查询自己主机的IP地址和www服务器的IP地址。虽然,我们可以使用IPCONFIG 和PING进行IP地址查询,但是如果在应用程序或APPLET中使用此命令回破坏我们应用程序界面。为此本人使用JAVA 做了一个简单的程序可以直接查询自己主机的IP地址和www服务器的IP地址。

作者:Robsun

时间:2002/3/20

 

***************************************************************/

 

import java.net.*;

public class NetTool

{

InetAddress myIPaddress=null;             //本机IP地址对象

InetAddress myServer=null;                //服务器IP地址对象

public static void main( String args[])   //入口函数

{

NetTool mytool;

mytool=new NetTool();

System.out.println("Your host IP is: "+ mytool.getMyIP());

System.out.println("The Server IP is:"+mytool.getServerIP());

}

/*

函数名:getMyIP

功能:取得本机的IP地址

输入参数:无

输出参数:本机的IP地址

抛出异常:无

作者:Robsun

时间:2002/3/20

*/

public InetAddress getMyIP()

{

try

{

myIPaddress=InetAddress.getLocalHost();

}

catch(UnknownHostException e)

{}     //可在此加入处理异常的代码

return (myIPaddress);

 }

/*

函数名:getServerIP

功能:取得WWW服务器的IP地址

输入参数:无

输出参数:WWWW服务器的IP地址

抛出异常:无

作者:Robsun

时间:2002/3/20

*/

 

public InetAddress getServerIP()

{

try

       {

myServer=InetAddress.getByName("www.abc.com");

}

catch(UnknownHostException e)

{}     //可在此加入处理异常的代码

return (myServer);

}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值