网站首页 > 文章中心 > 其它

java代码评审规范

作者:小编 更新时间:2023-09-03 10:35:37 浏览量:393人看过

java编码规范有哪些?

尽量使用完整的英文描述符,采用适用于相关领域的术语,采用大小写混合使名字可读.

JAVA代码规范:

(1)类名首字母应该大写.字段、方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.例如:

ThisIsAClassName

thisIsMethodOrFieldName

java代码评审规范-图1

hashCode()

toString()

clone()(implement Cloneable)

implement Serializable

一个复杂的开关语句:考虑采用"多形"机制

数量众多的方法涉及到类型差别极大的操作:考虑用几个类来分别实现

许多成员变量在特征上有很大的差别:考虑使用几个类

java代码评审规范-图2

为什么要遵守Java代码规范

为什么要遵守Java代码规范?当你第一次接触到Java代码规范的时候,你是不是觉得很麻烦呢?比如关于统一的原则,一再的强调,但是你一再的忘记,或者压根就不想照做,会出现什么样的后果呢?今天动力节点IT培训的小编将借Java代码规范中的统一来说说,自己对为什么要遵守Java代码规范,发表自己简单的看法.

Java代码规范中的统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一.统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解.即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次.

而如果你在一个项目中不遵守已经制定好的统一规范,那么不仅是给自己带来麻烦,也是给其他工作人员带来不便,在要进行整理的时候,你的不同,会带来不必要的交流麻烦.作为一个Java程序员,你一般是属于团队中的一员,你不遵守制定好的Java代码规范,其他人也不遵守那么你们的团队就得乱套了,所以面对Java代码规范的学习,不要觉得无趣,还是得用心记住,并且予以遵守.

java程序员有哪些应该注意的编码规范?

,通常是com、edu、gov、mil、net、org等;如:com.yjhmily.test类(Class)的命名类名应该是个一名词,采用大小写混合的方式,每个单词的首字母大写.尽量保证类名简洁而富于描述.

北大青鸟java培训:Java编程开发规范及其技巧?

在用Java进行开发前,一定要牢牢遵守Java的开发规范,只有这样你的Java开发之路才能更加顺畅.

而掌握相应的Java开发技巧,则可以让你工作起来事半功倍.

那在编写代码时有什么开发规范和技巧呢?电脑培训给你详细介绍一下吧.

①.、代码编写规范:代码编写遵守Java通用开发规范和必联代码开发规范;每个类及方法都要有合理的注释,并且对注释要持续维护;根据接口需求编写单元测试用例,再编写实现类使得单元测试通过,如此循环往复以使得所有的单元测试通过;要求每个Java方法的代码行数不能超过100行;代码编写按照功能划分,一个接口分为多个方法,每一个方法做什么事情,做到思路清晰;接口设计尽量做到多兼容性,方便后期开发.

java编程规范!!!

名称 Java语言编码规范(Java Code Conventions)

简介 本文档讲述了Java语言的编码规范,较之陈世忠先生<>的浩繁详尽,此文当属短小精悍了.而其中所列之各项条款,从编码风格,到注意事项,不单只Java,对于其他语言,也都很有借鉴意义.因为简短,所以易记,大家不妨将此作为handbook,常备案头,逐一对验.

①. 介绍

①1 为什么要有编码规范

①.0 编程惯例

①.0.1 提供对实例以及类变量的访问控制

①.1 代码范例

①.1.1 Java源文件范例

①. 介绍(Introduction)

①1 为什么要有编码规范(Why Have Code Conventions)

编码规范对于程序员而言尤为重要,有以下几个原因:

- 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护

- 编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码

- 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品

为了执行规范,每个软件开发人员必须一致遵守编码规范.每个人.

本文档反映的是Sun MicroSystems公司,Java语言规范中的编码标准部分.主要贡献者包括:Peter King,Patrick Naughton,Mike DeMoney,Jonni Kanerva,Kathy Walrath以及Scott Hommel.

这部分列出了常用的文件名及其后缀.

Java程序使用下列文件后缀:

文件类别 文件后缀

Java源文件 .java

Java字节码文件 .class

常用的文件名包括:

文件名 用途

GNUmakefile makefiles的首选文件名.我们采用gnumake来创建(build)软件.

README 概述特定目录下所含内容的文件的首选文件名

每个Java源文件都包含一个单一的公共类或接口.若私有类和接口与一个公共类相关联,可以将它们和公共类放入同一个源文件.公共类必须是这个文件中的第一个类或接口.

Java源文件还遵循以下规则:

- 开头注释(参见"开头注释")

- 包和引入语句(参见"包和引入语句")

- 类和接口声明(参见"类和接口声明")

所有的源文件都应该在开头有一个C语言风格的注释,其中列出类名、版本信息、日期和版权声明:

/*

* Classname

*

* Version information

* Date

* Copyright notice

*/

在多数Java源文件中,第一个非注释行是包语句.在它之后可以跟引入语句.例如:

package java.awt;

import java.awt.peer.CanvasPeer;

下表描述了类和接口声明的各个部分以及它们出现的先后次序.参见"Java源文件范例"中一个包含注释的例子.

类/接口声明的各部分 注解

①. 类/接口文档注释(/**......*/) 该注释中所需包含的信息,参见"文档注释"

当一个表达式无法容纳在一行内时,可以依据如下一般规则断开之:

- 在一个逗号后面断开

- 在一个操作符前面断开

- 宁可选择较高级别(higher-level)的断开,而非较低级别(lower-level)的断开

- 新的一行应该与上一行同一级别表达式的开头处对齐

以下是断开方法调用的一些例子:

var = someMethod1(longExpression1,

以下是两个断开算术表达式的例子.前者更好,因为断开处位于括号表达式的外边,这是个较高级别的断开.

//CONVENTIONAL INDENTATION

someMethod(int anArg, Object anotherArg, String yetAnotherArg,

Object andStillAnother) {

...

}

private static synchronized horkingLongMethodName(int anArg,

Object anotherArg, String yetAnotherArg,

//DON'T USE THIS INDENTATION

doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS

//USE THIS INDENTATION INSTEAD

doSomethingAboutIt();

//OR USE THIS

这里有三种可行的方法用于处理三元运算表达式:

alpha = (aLongBooleanExpression) ? beta : gamma;

alpha = (aLongBooleanExpression) ? beta

: gamma;

alpha = (aLongBooleanExpression)

beta

Java程序有两类注释:实现注释(implementation comments)和文档注释(document comments).实现注释是那些在C++中见过的,使用/*...*/和//界定的注释.文档注释(被称为"doc comments")是Java独有的,并由/**...*/界定.文档注释可以通过javadoc工具转换成HTML文件.

实现注释用以注释代码或者实现细节.文档注释从实现自由(implementation-free)的角度描述代码的规范.它可以被那些手头没有源码的开发人员读懂.

注释应被用来给出代码的总括,并提供代码自身没有提供的附加信息.注释应该仅包含与阅读和理解程序有关的信息.例如,相应的包如何被建立或位于哪个目录下之类的信息不应包括在注释中.

在注释里,对设计决策中重要的或者不是显而易见的地方进行说明是可以的,但应避免提供代码中己清晰表达出来的重复信息.多余的的注释很容易过时.通常应避免那些代码更新就可能过时的注释.

注意:频繁的注释有时反映出代码的低质量.当你觉得被迫要加注释的时候,考虑一下重写代码使其更清晰.

注释不应写在用星号或其他字符画出来的大框里.注释不应包括诸如制表符和回退符之类的特殊字符.

块注释通常用于提供对文件,方法,数据结构和算法的描述.块注释被置于每个文件的开始处以及每个方法之前.它们也可以被用于其他地方,比如方法内部.在功能和方法内部的块注释应该和它们所描述的代码具有一样的缩进格式.

块注释之首应该有一个空行,用于把块注释和代码分割开来,比如:

* Here is a block comment.

块注释可以以/*-开头,这样indent(1)就可以将之识别为一个代码块的开始,而不会重排它.

/*-

* Here is a block comment with some very special

* formatting that I want indent(1) to ignore.

* one

* two

* three

注意:如果你不使用indent(1),就不必在代码中使用/*-,或为他人可能对你的代码运行indent(1)作让步.

参见"文档注释"

短注释可以显示在一行内,并与其后的代码具有一样的缩进层级.如果一个注释不能在一行内写完,就该采用块注释(参见"块注释").单行注释之前应该有一个空行.以下是一个Java代码中单行注释的例子:

if (condition) {

/* Handle the condition. */

极短的注释可以与它们所要描述的代码位于同一行,但是应该有足够的空白来分开代码和注释.若有多个短注释出现于大段代码中,它们应该具有相同的缩进.

以下是一个Java代码中尾端注释的例子:

return TRUE; /* special case */

} else {

return isPrime(a); /* works only for odd a */

注释界定符"//",可以注释掉整行或者一行中的一部分.它一般不用于连续多行的注释文本;然而,它可以用来注释掉连续多行的代码段.以下是所有三种风格的例子:

if (foo 1) {

// Do a double-flip.

else {

return false; // Explain why here.

//if (bar 1) {

//

// // Do a triple-flip.

// ...

//}

//else {

// return false;

注意:此处描述的注释格式之范例,参见"Java源文件范例"

若想了解更多,参见"How to Write Doc Comments for Javadoc",其中包含了有关文档注释标记的信息(@return, @param, @see):

若想了解更多有关文档注释和javadoc的详细资料,参见javadoc的主页:

文档注释描述Java的类、接口、构造器,方法,以及字段(field).每个文档注释都会被置于注释定界符/**...*/之中,一个注释对应一个类、接口或成员.该注释应位于声明之前:

/**

* The Example class provides ...

public class Example { ...

文档注释不能放在一个方法或构造器的定义块中,因为Java会将位于文档注释之后的第一个声明与其相关联.

推荐一行一个声明,因为这样以利于写注释.亦即,

int level; // indentation level

int size; // size of table

要优于,

int level, size;

不要将不同类型变量的声明放在同一行,例如:

int foo, fooarray[]; //WRONG!

注意:上面的例子中,在类型和标识符之间放了一个空格,另一种被允许的替代方式是使用制表符:

intlevel; // indentation level

intsize; // size of table

ObjectcurrentEntry; // currently selected table entry

尽量在声明局部变量的同时初始化.唯一不这么做的理由是变量的初始值依赖于某些先前发生的计算.

只在代码块的开始处声明变量.(一个块是指任何被包含在大括号"{"和"}"中间的代码.)不要在首次用到该变量时才声明之.这会把注意力不集中的程序员搞糊涂,同时会妨碍代码在该作用域内的可移植性.

void myMethod() {

int int1 = 0; // beginning of method block

该规则的一个例外是for循环的索引变量

for (int i = 0; i maxLoops; i++) { ... }

避免声明的局部变量覆盖上一级声明的变量.例如,不要在内部代码块中声明相同的变量名:

int count;

myMethod() {

int count = 0; // AVOID!

当编写类和接口是,应该遵守以下格式规则:

- 在方法名与其参数列表之前的左括号"("间不要有空格

- 左大括号"{"位于声明语句同行的末尾

- 右大括号"}"另起一行,与相应的声明语句对齐,除非是一个空语句,"}"应紧跟在"{"之后

class Sample extends Object {

int ivar1;

Sample(int i, int j) {

ivar1 = i;

int emptyMethod() {}

- 方法与方法之间以空行分隔

每行至多包含一条语句,例如:

argv++; // Correct

argc--; // Correct

argv++; argc--; // AVOID!

复合语句是包含在大括号中的语句序列,形如"{ 语句 }".例如下面各段.

- 被括其中的语句应该较之复合语句缩进一个层次

- 左大括号"{"应位于复合语句起始行的行尾;右大括号"}"应另起一行并与复合语句首行对齐.

- 大括号可以被用于所有语句,包括单个语句,只要这些语句是诸如if-else或for控制结构的一部分.这样便于添加语句而无需担心由于忘了加括号而引入bug.

一个带返回值的return语句不使用小括号"()",除非它们以某种方式使返回值更为显见.例如:

return;

return myDisk.size();

return (size ? size : defaultSize);

if-else语句应该具有如下格式:

statements;

} else if (condition) {

} else{

注意:if语句总是用"{"和"}"括起来,避免使用如下容易引起错误的格式:

if (condition) //AVOID! THIS OMITS THE BRACES {}!

statement;

一个for语句应该具有如下格式:

for (initialization; condition; update) {

一个空的for语句(所有工作都在初始化,条件判断,更新子句中完成)应该具有如下格式:

for (initialization; condition; update);

当在for语句的初始化或更新子句中使用逗号时,避免因使用三个以上变量,而导致复杂度提高.若需要,可以在for循环之前(为初始化子句)或for循环末尾(为更新子句)使用单独的语句.

一个while语句应该具有如下格式

while (condition) {

一个空的while语句应该具有如下格式:

while (condition);

一个do-while语句应该具有如下格式:

do {

} while (condition);

一个switch语句应该具有如下格式:

switch (condition) {

case ABC:

/* falls through */

case DEF:

break;

case XYZ:

default:

每当一个case顺着往下执行时(因为没有break语句),通常应在break语句的位置添加注释.上面的示例代码中就包含注释/* falls through */.

一个try-catch语句应该具有如下格式:

try {

} catch (ExceptionClass e) {

一个try-catch语句后面也可能跟着一个finally语句,不论try代码块是否顺利执行完,它都会被执行.

} finally {

空行将逻辑相关的代码段分隔开,以提高可读性.

下列情况应该总是使用两个空行:

- 一个源文件的两个片段(section)之间

- 类声明和接口声明之间

下列情况应该总是使用一个空行:

- 两个方法之间

- 方法内的局部变量和方法的第一条语句之间

- 一个方法内的两个逻辑段之间,用以提高可读性

下列情况应该使用空格:

- 一个紧跟着括号的关键字应该被空格分开,例如:

while (true) {

注意:空格不应该置于方法名与其左括号之间.这将有助于区分关键字和方法调用.

- 空白应该位于参数列表中逗号的后面

- 所有的二元运算符,除了".",应该使用空格将之与操作数分开.一元操作符和操作数之间不因该加空格,比如:负号("-")、自增("++")和自减("--").例如:

a += c + d;

a = (a + b) / (c * d);

while (d++ = s++) {

n++;

printSize("size is " + foo + "\n");

- for语句中的表达式应该被空格分开,例如:

- 强制转型后应该跟一个空格,例如:

myMethod((byte) aNum, (Object) x);

命名规范使程序更易读,从而更易于理解.它们也可以提供一些有关标识符功能的信息,以助于理解代码,例如,不论它是一个常量,包,还是类.

标识符类型 命名规则 例子

edu.cmu.cs.bovik.cheese

类(Classes) 命名规则:类名是个一名词,采用大小写混合的方式,每个单词的首字母大写.尽量使你的类名简洁而富于描述.使用完整单词,避免缩写词(除非该缩写词被更广泛使用,像URL,HTML) class Raster;

class ImageSprite;

接口(Interfaces) 命名规则:大小写规则与类名相似 interface RasterDelegate;

interface Storing;

方法(Methods) 方法名是一个动词,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写. run();

runFast();

getBackground();

变量(Variables) 除了变量名外,所有实例,包括类,类常量,均采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写.变量名不应以下划线或美元符号开头,尽管这在语法上是允许的.

变量名应简短且富于描述.变量名的选用应该易于记忆,即,能够指出其用途.尽量避免单个字符的变量名,除非是一次性的临时变量.临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型. char c;

int i;

float myWidth;

实例变量(Instance Variables) 大小写规则和变量名相似,除了前面需要一个下划线 int _employeeId;

String _name;

Customer _customer;

static final int GET_THE_CPU = 1;

①.0 编程惯例(Programming Practices)

①.0.1 提供对实例以及类变量的访问控制(Providing Access to Instance and Class Variables)

若没有足够理由,不要把实例或类变量声明为公有.通常,实例变量无需显式的设置(set)和获取(gotten),通常这作为方法调用的边缘效应 (side effect)而产生.

一个具有公有实例变量的恰当例子,是类仅作为数据结构,没有行为.亦即,若你要使用一个结构(struct)而非一个类(如果java支持结构的话),那么把类的实例变量声明为公有是合适的.

java软件开发的代码规范

①.、组织与风格

(1).关键词和操作符之间加适当的空格.

注:如果大家有兴趣可以到安安DIY创作室博客,有相关说明性的文章和解释.

Java 的语法与 C++ 及为相似,那么,你知道 Java 的注释有几种吗?是两种?

// 注释一行

/* ...... */ 注释若干行

不完全对,除了以上两种之外,还有第三种,文档注释:

/** ...... */ 注释若干行,并写入 javadoc 文档

注释要简单明了.

String userName = null; //用户名

边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性.

在必要的地方注释,注释量要适中.注释的内容要清楚、明了,含义准确,防止注释二义性.

保持注释与其描述的代码相邻,即注释的就近原则.

对代码的注释应放在其上方相邻位置,不可放在下面.对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释应放在此域的右方;

同一结构中不同域的注释要对齐.

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

全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明.

* Copy Right Information : Neusoft IIT

* Project : eTrain

* Comments : config path

* Version : 1.01

* Sr Date Modified By Why What is modified

**/

在每个函数或过程的前面要有必要的注释信息,包括:函数或过程名称;功能描述;输入、输出及返回值说明;调用关系及被调用关系说明等

* Description :checkout 提款

* @param Hashtable cart info

* @param OrderBean order info

* @return String

public String checkout(Hashtable htCart,

OrderBean orderBean)

throws Exception{

javadoc注释标签语法

@version 对类的说明 标明该类模块的版本

@see 对类、属性、方法的说明 参考转向,也就是相关主题

@param 对方法的说明 对方法中某参数的说明

@return 对方法的说明 对方法返回值的说明

@exception 对方法的说明 对方法可能抛出的异常进行说明

定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失.(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)较短的单词可通过去掉元音形成缩写;要不然最后自己写的代码自己都看不懂了,那可不行.

较长的单词可取单词的头几发符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级.

使用匈牙利表示法

Package 的命名

Package 的名字应该都是由一个小写单词组成.

package com.neu.util

Class 的命名

Class 的名字必须由大写字母开头而其他字母都小写的单词组成,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.

public class ThisAClassName{}

Class 变量的命名

变量的名字必须用一个小写字母开头.后面的单词用大写字母开头

userName , thisAClassMethod

Static Final 变量的命名

static Final 变量的名字应该都大写,并且指出完整含义.

*DBConfig PATH

public static final String

DB_CONFIG_FILE_PATH =com.neu.etrain.dbconfig;

参数的命名

参数的名字必须和变量的命名规范一致.

数组的命名

数组应该总是用下面的方式来命名:

byte[] buffer;

而不是:

byte buffer[];

方法的参数

使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:

SetCounter(int size){

this.size = size;

所有的 Java(*.java) 文件都必须遵守如下的样式规则:

版权信息

版权信息必须在 java 文件的开头,比如:

* 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; }

其它的方法不要写在一行上

java代码评审规范-图3

构造函数

此时此刻呢是构造函数,它应该用递增的方式写(比如:参数多的写在后面).

访问类型 (public, private 等.) 和 任何 static, final 或 synchronized 应该在一行

中,并且方法和参数另写一行,这样可以使方法和参数更易读.

public

CounterSet(int size){

克隆方法

如果这个类是可以被克隆的,那么下一步就是 clone 方法:

Object clone() {

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

throws IllegalArgumentException

{

// Ensure the arrays are of equal size

throw new IllegalArgumentException(Arrays must be of the same size);

toString 方法

无论如何,每一个类都应该定义 toString 方法:

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

避免使用不易理解的数字,用有意义的标识来替代.

不要使用难懂的技巧性很高的语句.

源程序中关系较为紧密的代码应尽可能相邻.

在写代码的时候,从头至尾都应该考虑性能问题.这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率.比如:如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她.

不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后.

不必要的对象构造

不要在循环中构造和释放对象

使用 StringBuffer 对象

在处理 String 的时候要尽量使用 StringBuffer 类,StringBuffer 类是构成 String 类的基础.

String 类将 StringBuffer 类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口.当我们在构造字符串的时候,我们应该用 StringBuffer 来实现大部分的工作,当工作完成后将 StringBuffer 对象再转换为需要的 String 对象.比如:如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer 对象和她的 append() 方法.如果我们用 String 对象代替StringBuffer 对象的话,会花费许多不必要的创建和释放对象的 CPU 时间.大家可以来安安DIY创作室一起讨论.

避免太多的使用 synchronized 关键字避免不必要的使用关键字 synchronized,应该在必要的时候再使用她,这是一个避免死锁的好方法.

byte 数组转换到 characters

为了将 byte 数组转换到 characters,你可以这么做:

Hello world!.getBytes();

Utility 类

Utility 类(仅仅提供方法的类)应该被申明为抽象的来防止被继承或被初始化.

初始化

下面的代码是一种很好的初始化数组的方法:

objectArguments = new Object[] { arguments };

枚举类型

JAVA 对枚举的支持不好,但是下面的代码是一种很有用的模板:

class Colour {

public static final Colour BLACK = new Colour(0, 0, 0);

public static final Colour RED = new Colour(0xFF, 0, 0);

public static final Colour GREEN = new Colour(0, 0xFF, 0);

public static final Colour BLUE = new Colour(0, 0, 0xFF);

public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);

这种技术实现了RED, GREEN, BLUE 等可以象其他语言的枚举类型一样使用的常量.

他们可以用 '==' 操作符来比较.

但是这样使用有一个缺陷:如果一个用户用这样的方法来创建颜色 BLACK new Colour(0,0,0)

那么这就是另外一个对象,'=='操作符就会产生错误.她的 equal() 方法仍然有效.由于这个原因,这个技术的缺陷最好注明在文档中,或者只在自己的包中使用.

代码样式

代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行)

文档化

必须用 javadoc 来为类生成文档.不仅因为它是标准,这也是被各种 java 编译器都认可的方法.使用 @author 标记是不被推荐的,因为代码不应该是被个人拥有的.

缩进

页宽

{} 对

if (i0) { i ++ }; // 错误, { 和 } 在同一行

if (i0) {

i ++

}; // 正确, { 单独作为一行

} 语句永远单独作为一行.如果 } 语句应该缩进到与其相对应的 { 那一行相对齐的位置.

括号

左括号和后一个字符之间不应该出现空格, 同样, 右括号和前一个字符之间也不应该出现空格. 下面的例子说明括号和空格的错误及正确使用:

CallProc( AParameter ); // 错误

CallProc(AParameter); // 正确

不要在语句中使用无意义的括号. 括号只应该为达到某种目的而出现在源代码中.下面的例子说明错误和正确的用法:

①编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失.

①.0、可移植性

Borland Jbulider 不喜欢 synchronized 这个关键字,如果你的断点设在这些关键字的作用域内的话,调试的时候你会发现的断点会到处乱跳,让你不知所措.除非必须,尽量不要使用.

换行

如果需要换行的话,尽量用 println 来代替在字符串中使用\n.

你不要这样:

System.out.print(Hello,world!\n);

要这样:

System.out.println(Hello,world!);

或者你构造一个带换行符的字符串,至少要象这样:

String newline = System.getProperty(line.separator);

System.out.println(Hello world + newline);

PrintStream

PrintStream 已经被不赞成(deprecated)使用,用 PrintWrite 来代替它.

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章