标题: [转帖]JAVA编程规范 [打印本页] 作者: god 时间: 2005-3-31 01:32 标题: [转帖]JAVA编程规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性) : y T- \# y# ~1 {) s, ?5 X2 b. [9 b( X- \
! v+ _+ |* |6 G+ }7 N8 b$ D. q' i
Package 的命名 & h. Q! v- T! I2 ?" D: t7 n2 e7 c" Z
Package 的名字应该都是由一个小写单词组成。 9 M7 q7 x9 L/ T& WClass 的命名 1 v$ t$ a) e# W( @7 G5 |- C$ BClass 的名字必须由大写字母开头而其他字母都小写的单词组成 $ N8 [8 `$ Q5 Z4 YClass 变量的命名 $ [: B( p" _, c* _, h: s$ W
变量的名字必须用一个小写字母开头。后面的单词用大写字母开头。 # f1 t( b& \1 P+ |; bStatic Final 变量的命名 & k( t; ]% s4 @& b: T& b9 x
Static Final 变量的名字应该都大写,并且指出完整含义。 . J! C) q, U/ ]
参数的命名 - ~2 n* }2 L( e3 o6 H6 S( b参数的名字必须和变量的命名规范一致。 7 W% T: d) H" w6 Q! Z: y( \数组的命名 % n/ B* N' q+ X数组应该总是用下面的方式来命名: - W7 l- D% f- z Z$ `( t, z7 ?8 ]& e/ G D0 O9 u5 M3 ~# C' C, z7 Rbyte[] buffer; * B" `8 b2 A% _% ~
" Q5 y9 }6 [' N/ B5 z+ }
. b* k. q9 {: j" P7 X2 h3 |而不是: ) h/ d6 f0 k" o4 i: T. d t9 G 3 f7 _: v- b; ?, \" obyte buffer[]; 1 D! Z8 S% C4 s, M1 N, v
7 ~3 c" @! I3 k, v2 W' T7 K
( E; B0 d( y, q1 n3 `; q/ j: Y' Q7 {6 i$ {3 a' Q5 r/ r: I
方法的参数 ! K% A/ r9 ~4 h% ^
使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字: & k0 B7 q' ]! k7 { 0 |" W H7 H2 r7 ESetCounter(int size){ $ W% I( Q% @7 f' e1 Kthis.size = size; 3 z) |/ v5 t9 `4 l
} / s: \& t s, I( L e6 p
$ H% z+ q9 R$ B: u+ \1 ` + q/ _# X4 J4 R. D. M0 q0 A: K$ r( L; D& G7 Q
; n" G% {8 v. O3 W- J& `& o: Y9 ~, N
Java 文件样式 8 M: ?, D, }* H. b- A3 q) f
所有的 Java(*.java) 文件都必须遵守如下的样式规则 6 N) I$ u: @6 F3 U# Q; h 1 n) y: f: `' _/ b) o) u$ c- e$ `1 f- \+ m
版权信息 3 b; N. s, E7 i$ _# }版权信息必须在 java 文件的开头,比如: / z+ s" V/ M1 \' Q+ Y' F9 ^+ j
: `4 u$ a) c9 u- F# v4 s, B( _) Q
/** ; R" E( x$ s4 a6 q* Copyright ® 2000 Shanghai XXX Co. Ltd. - y- v8 S' D0 L( Z5 o& b& ^# j* All right reserved. ( q4 [7 D- a7 l3 M
*/ ! S7 C0 j. ]; W" G8 z2 g- b8 K5 m
8 J F. j6 Q$ f3 Y6 G% {
, a1 Y% M) Y( m1 g4 i) d& g3 `2 |
其他不需要出现在 javadoc 的信息也可以包含在这里。 # r4 x* `0 ~* r7 A % o% c! M( p/ J3 p- N0 Z `2 a, t) c# S" |* ?6 E
Package/Imports , Q! v5 e' l: }7 v; u% `( Q
package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。 + }6 i& @* L+ m
3 |, u" D6 }9 J3 w
package hotlava.net.stats; - Y; e, r* d8 r! C9 H' `- `% W0 s. \: B6 C0 Z! y" u: w) P) U- S' O
import java.io.*; # Q0 \5 w3 `$ `% h( u gimport java.util.Observable; . K3 K# N# u; {/ E( G+ t, }8 }
import hotlava.util.Application; % Q" R. a+ i% U4 B3 x/ a 7 S/ [: |* ~! r+ |7 X) o& s( y( @1 L- E8 \: n- K* ^3 w
这里 java.io.* 使用来代替InputStream and OutputStream 的。 6 H' Z& p4 _- x$ x7 O; S6 F
- ?* g$ q, Q6 f9 R! r 5 Z* K+ `6 k* `) F# b. c$ l6 `6 RClass 4 X- \, i, B6 K- R0 ~; Z* ?7 m接下来的是类的注释,一般是用来解释类的。 ' b' `! ~5 d! a" e9 R! Z* n$ j % @9 M5 @3 u; h1 u/** - P+ Z# f# M& y# w* A class representing a set of packet and byte counters 1 g. N( ?/ v4 x0 L* It is observable to allow it to be watched, but only 9 w' J `5 b! T y: N$ p
* reports changes when the current set is complete # g& {9 w3 @! ~3 C4 Z1 B6 f*/ z! `8 R9 O) N5 L, I7 l$ ?* x
2 _. _' Z. M5 d( D: K 6 G: n& C& r7 K6 x* S4 \ A+ |接下来是类定义,包含了在不同的行的 extends 和 implements & H+ }0 f- {- k* [- |( m 5 U8 Z6 D) F: S, r* Ipublic class CounterSet . {) Y8 u! P$ _7 m4 C$ H fextends Observable ' O' y" V2 _& W: F3 n C; B7 [
implements Cloneable & R6 f! V3 B6 Z# f
b! m* L7 S1 o, o1 c0 e