JAVA书写规范

java程序书写规范

命名规范
    1、一般概念
        1、尽量使用完整的英文描述符
        2、采用适用于相关领域的术语
        3、采用大小写混合使名字可读
        4、尽量少用缩写,但如果用了,必须符合整个工程中的统一定义
        5、避免使用长的名字(小于 15 个字母为正常选择)
        6、避免使用类似的名字,或者仅仅是大小写不同的名字
        7、避免使用下划线(除静态常量等)
     2、标识符类型说明
        1、包( Package )的命名
            Package 的名字应该采用完整的英文描述符,都是由一个小写单词组成。并且包名的前缀总是一个顶级域名,
            通常是 com、edu、gov、mil、net、org 等;
            如: com.yjhmily.test
        2、类( Class )的命名
            类名应该是个一名词,采用大小写混合的方式,每个单词的首字母大写。尽量保证类名简洁而富于描述。
            使用完整单词,避免缩写词 ( 除非工程内有统一缩写规范或该缩写词被更广泛使用,像 URL , HTML)
        如: FileDescription
        3、接口( Interface )的命名
            基本与 Class 的命名规范类似。在满足 Classd 命名规则的基础之上,保证开头第一个字母为 ”I”,
            便于与普通的 Class区别开。其实现类名称取接口名的第二个字母到最后,且满足类名的命名规范;
        如: IMenuEngine

4、枚举( Enum )的命名
            基本与 Class 的命名规范类似。在满足 Classd 命名规则的基础之上,保证开头第一个字母为 ”E” ,
            便于与普通的 Class区别开。
        如: EUserRole

5、异常( Exception )的命名
            异常( Exception ) 通常采用字母 e 表示异常,对于自定义的异常类,其后缀必须为 Exception
        如: BusinessException

6、方法( Method )的命名
            方法名是一个动词,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。
            方法名尽可能的描述出该方法的动作行为。返回类型为 Boolean 值的方法一般由“ is ”或“ has ”来开头
        如: getCurrentUser() 、 addUser() 、 hasAuthority()

7、参数( Param )的命名
            第一个单词的首字母小写,其后单词的首字母大写。参数量名不允许以下划线或美元符号开头,
            虽然这在语法上是允许的。参数名应简短且富于描述。
        如: public UserContext getLoginUser(String loginName);
       
        8、常量字段 ( Constants )的命名
            静态常量字段( static final ) 全部采用大写字母,单词之间用下划线分隔;
        如: public static final Long FEEDBACK;
        public static Long USER_STATUS;

1. 风格务必保持一贯性(Consistent)

一位同胞顶着我的鼻子问,为什么我们的Java代码缩进格式非得是这样,而不能是他那样,他就是喜欢他自己的这一种,因此他写的代码总是用他自己习惯的风格。结果在Code Review里被大家毙掉,责令修改。因此他是大大地不服。就是风格一贯性问题。其实他的风格,本来也没有什么问题,但在项目里,和其他程序员的程序的风格,显得扃异,那就存在问题了。比如这个缩进,又比如变量命名方法,不同的类,不同的Methods里,各自不同,这程序就很难看了。所以一旦你选择了某种风格,一定要贯彻始终。如果一个项目里规定了一个风格,即便很不符合你自己的习惯,也要贯彻始终,绝不应该有标新立异。

2. 缩进风格(indent)

既然是从缩进说起,就先说说缩进风格;一般来说,象Java这样的类C语言,都采用缩进风格。而常用的,有四种

A.K&R风格

这是C程序最早的缩进风格,由C的发明者Ritchie和他的合作者Kernighan率先使用:

if (<cond>) {

<body>

}

其特点,是大括号和if判断在同一行。通常,缩进为8个空格或一个tab键,但在C++和Java里,也常缩进4个空格。有人喜欢用两个空格,窃以为不好,不明显。

B. BSD 风格

又称Allman Style,源自Unix BSD程序员Eric Allman--他为BSD写过很多程序:

if (<cond>)

{

<body>

}

特点:大括号和条件判断分在两行。

C. Whitesmith风格

这种风格源于Whitesmith C:

if (<cond>)

{

<body>

}

D. GNU风格

这种风格仅见于GNU EMACS的源程序中:

if (<cond>)

{

<body>

}

那么在Java里用哪种好呢?建议只采用A或B。SUN有一个Java Code Name Convention,建议的是A。

3. Tab还是空格(Tabs vs Space)

还是缩进问题。那么一次缩进应该多大距离?是八个空格键,还是一个Tab键?

Java有一个特点,就是跨平台性。不过跨平台指的是它的Class可以在不同平台的虚拟机上运行。Java的源程序,有时候可不是跨平台的。什么?源程序还能不跨平台?是的。有次一个程序员送来一些Code,在我的环境里打开,程序难看得一塌糊涂,有该缩进的地方,没有缩进,有的则缩进一大截,如同怪石一样,嶙峋参差。这样的代码质量可不行!叫来程序员一问,答曰在他那里漂亮得很啊,他还专门花时间去美化它们了呢?

原来他的缩进没有注意一个风格,在有的地方用Tab键,有的地方打空格。在一些不同的平台上,Tab键的宽度可是不一样的。

说道这里,相信大家比较清楚了,在缩进的时候,尽量不用Tab,而是用空格。好在许多编辑器,都可以把你的键盘上的Tab键定义成几个空格。赶紧去定义它!

每次用多少空格呢?4个。2个太少不明显,8个太多占空间。

4. 行宽

说道8个空格键占空间,那么我一行有320列,8个空格算什么?打住!请寄住,一行尽量不要超过80列。许多终端一个屏幕只能显示80列,为它们想想巴。如果你的语句太长,想办法折断它,分几列来写。

5. 变量命名

SUN Java Code Convention里定义了Java里package, class, method和普通变量的命名规则,我就不用再浪费字节了。这里提提一些注意事项和一些SUN没提到但大家常用的方式。

a. 用有意义的名字命名变量

首先,用完整的英语单词或约定俗成的简写命名你的变量,如:

firstName

zipCode

如果英语不够好,至少用别人看得懂的拼音命名,如

zhuZhi (住址)

胡乱简写,或者胡乱命名,则没有人看得懂你的变量的含义:

fn

zc

zz

b. 常量用全大写加下画线命名

Java里的常量,就是static final:

static final SMTH_BBS="bbs.tsinghua.edu.cn";

c. 用复数命名collection类变量

collection包括数组,vector等。命名时请用复数:

customers

classMates

也可以用一些修饰词命名:

someStudents

allDepartments

d. 循环变量

一般大家都用i, j, k等做循环变量。

e. Stream变量

一般习惯用in, out作为Stream变量,对应inputStream, outputStream

类。如果即读又写的ioStream,可以用inOut。

f. 变量的命名习惯

习惯MFC的人喜欢采用匈牙利命名法(Hungarian Notation)。如果你习惯这样,尽管用,但注意要和同Project的人保持一致。还有些人习惯C++里的下画线方式,也可以采用。

Hungarian Notation:

sFirstName

Under Score Style:

_firstName

这里提供一个Hungarian Notation的前缀命名习惯:

int                     i

byte                  b

char                  c

double              d

float                  f

long                  l

offset                off

length               len

Object              o

String               s (or str)

Arbitray value    v

6. Java文件格式

有许多方式定义你的文件语句格式,以下是一个例子:

a. 文件头说明 (可无)

b. Package定义

c. 空行

d. Import语句

e. 空行

f. 类定义

如:

package com.midi;

//Java Classes

import java.awt.*;

import java.io.*;

import javax.swing.event.*;

//WebLogic Classes

import weblogic.internal.*;

/**

* Blah blah

* @author midi

* @version 22.2

*/

public class MyFirst extends JFrame {

...

}

/**

* Foo...

* @author midi

* @version 38.2

*/

class Foo {

...

}

7. import顺序

杂乱无章的顺序,看起来很不顺眼。应该对你要import的classes归类,按顺序罗列:

a. Java标准类(java.*)

b. Java扩充类(javax.*)

c. 第三方类

d. 你的应用程序的类

而且注意在第三方类里注释它们,说明它们的来源:

import java.*;

import java.util.Date;

import java.util.Enumeration;

import javax.sql.*;

//Apache Xerces

import org.apache.xml.*;

import org.apache.xerces.dom.*;

//Application classes

import com.midi.util.*;

8. Classes的顺序

a. Javadoc注释或者其它文件头注释

b. 类声明

c. Fields声明

d. 空行

e. 构造函数

f. 空行

g. 方法(不包括main)

h. 空行

i. Inner类

j. 空行

k. main()

例:

/**

* This is a simple DOM tree XML parser...

* ...

* @author: midi

* @version: 0.0.1

**/

public class MyParser {

// public constants

public static final String TITLE = "MyParser";

public static final String VERSION = "0.0.1";

// Private variables

private int iSchemaVersion;

/**

* Constructor

*/

public MyParser () {

iSchemaVersion = 1;

}

/**

* Constructor

* @param...

*/

public MyParser (iSchemaVersion) {

this.iSchemaVersion = iSchemaVersion;

}

/**

* Initialize the parser...

*/

public void myInit () throws Exception {

....

}

/**

* start the application

*/

public static void main (String[] argvs) {

...

}

}

9. Field定义

请遵从以下顺序:

a. Public常量

b. Public变量

c. Protected常量

d. Protected变量

e. Package常量

f. Package变量

g. Private常量

h. Private变量

另:本文仅限IT爱好者交流

该文引自百度文库,如有雷同,纯属巧合,本文最终解释权归此博主所有。

时间: 2024-11-08 18:16:44

JAVA书写规范的相关文章

[Java基础回顾] XML的书写规范与解析.

前言今天天气大好, 起了个大早开始总结一些常用的基础知识. XML一直来说都很陌生, 使用大多是用于配置文件, 之前并没有细究过其中的约束规范, 今天刚好没事来学习并总结下. 1,XML基础介绍 XML 指可扩展标记语言(EXtensible Markup Language),也是一种标记语言,很类似 HTML.它的设计宗旨是传输数据,而非显示数据它;标签没有被预定义,需要自行定义标签. xml的作用: XML 是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行

java编码规范

右括号") "与其后面的关键字之间,关键字与其后面的左括号"("或"{"之间,以及"}"与"{"之间,要以一个空格隔开:除". "外,所有二元操作符的前.后要加空格:在逗号后边加一个空格. 说明: 一个紧跟着括号的关键词应该被空格分开: 空白应该位于参数列表中逗号的后面: 所有的二元运算符,除了".",应该使用空格将之与操作数分开.一元操作符和操作数之间不应该加空格,

代码书写规范和命名规范

上一篇给大家分享了一下,关于文档编写的几个概念.这篇文章阐述如果编写代码书写规范以及命名规范文档.[以java语言为例] 1.代码书写规范 代码书写规范,能够让不同的人,写出相同风格的代码.很多人都看过java源代码,你会发现java源代码的整体风格几乎是一致的,但是你要知道编写源代码的人是很多的,如何才能让他们写出同一风格的代码呢?这就是代码书写规范的作用. 代码书写规范描述的是如何从头到尾书写代码(自己定义的).通俗点讲就是如何书写java文件.就像你写毕业论文一样,从头到尾每个细节都是有要

javaSE之java命名规范

java命名规范 1.Java中的名称规范: (1)包名全是小写:xxyyzz: (2)类名接口名:首字母大写:XxxYyy: (3)变量名和函数名:变量名不能是关键字:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写xxxYyyZzz.(驼峰表示法) (4)常量名:所有字母都大写.多单词时每个单词用下划线链接,XXX_YYY_ZZZ. 2.Java中书写程序的规范: (1)类包含方法,方法包含语句: (2)类名通常由英文单词组成(有意义的名称,可增加阅读性),首字母要大写:

java开发规范总结_代码编码规范

规范需要平时编码过程中注意,是一个慢慢养成的好习惯 1.基本原则 强制性原则:     1.字符串的拼加操作,必须使用StringBuilder:     2.try…catch的用法 try{ }catch{Exception e e.printStackTrace(); }finally{ }//在最外层的Action中可以使用,其它地方一律禁止使用: try{ //程序代码 }catch(Exception e){ //为空,什么都不写 }//在任何场景中都禁止使用 try{ }catch

个人整理--Java编码规范

编码规范对于开发人员来说是非常重要的,有以下几个原因: 1.一个软件的生命周期中,80%的花费在于维护 2.几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 3.编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码 4.如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品 5.为来自不同的项目组或个人提供标准的代码格式. 6.增加易读性. 在不用Java两年多后因工作需要我又要转入Java开发,为此我整理出下面的编码规范,

Java基础--Java编程规范

IsCoder 标记: Java基础,Java编程规范 摘要:Java虽然没有强制性的编程规范,但是为了便于统一,Java有不成文的编程规范,为了形成良好的编程习惯,建议熟悉并遵守Java编程规范,提高代码的阅读性. 一.Java标识符 在任何语言中,都要自己的一套标识符规则.Java的标识符包括:Java关键字.Java特殊功能的标识符.合法的用户自定义标识符.其中,我们能改变的只有自定义的标识符,和大部分计算机编程语言一样,Java标识符原始只支持ASCII的编码,但是随着Java在世界的影

java命名规范:一些细节

java命名规范:一些细节 任何一门语言都是用来交流的,都有自己的一套书写规范,Java 也不例外. 注重这些细节有几个好处: 好的命名规范可以使得写出来的程序更容易被别人理解,更好维护.当然也易于自己理解,以便日后扩展. 同时,也使程序更规范和专业.  在这个人性化横行的今天,我们的Java命名规范也应该注重体验. 了解命名规范,可以更好的学习和记忆 Java 类库中的类和函数等. 在命名规范里有很多都涉及到英文的,可以促进英文学习. 比如: numberMax, MaxNumber和maxN

JAVA代码规范

1. 介绍 为统一Java项目编码规范,提高可读性,特制定本规范. 本规范同样适用于Android项目. 本规范基于Google Java Style,主要的区别如下: 保留了原有规范的4空格缩进和120字符列宽限制 放松了对import语句的组织方式要求.只要有一定逻辑性即可,不做严格限制.但要求未使用的import语句必须删除 对Android的成员变量命名允许了例外.非public非static的变量可以使用m开头非常量的static变量可以使用s开头 switch语句禁止了case贯穿,