Java开发者需坚守的十大基本准则

有许多标准和实践 准则可适用于Java开发者,但此处要说的,是每个Java开发者需坚守的基本原则。
&A7{Ck B8X0
;J'{aaGPi"f-P x0  一、为代码加注释。虽然每个人都知道这点,但有时却不自觉忘了履行,今天你“忘了”加注释了吗?虽然注释对程序的功能没什么“贡献”,但过一段时间,比如说两星期之后或者更长,回过头来看看自己的代码,说不定已经记不住它是干什么的了。如果这些代码是你个人的,那还算是走运了,不幸的是,当然了,大多数时候都是别人的不幸,很多时候大家都是在为公司写代码,写代码的人也许早已经离开了公司,但别忘了一句古话,有来有往嘛,为他人,也为我们自己,请为你的代码加上注释。 中文JAVA技术网F7Kh9C#OyhS6g

D,fX]m$K(KQ;[4Q0  二、不要让事情复杂化。程序员有时候总是对简单问题想出复杂的解决方案,比如说,在只有五个 用户的程序中引入 EJB、对程序实现了并不需要的框架(framework),之类的还有属性文件、 面向对象解决方案、多 线程等等。为什么要这样做呢?也许我们并不知道是否这样会更好,但这样做也许可以学到一些新东西,或者让自己更感兴趣一些。如果是不知道为什么这样做,建议多请教经验丰富的程序员,如果是为了个人的目的,麻烦让自己更专业一点。
3Sp2q$ht0
D4wb6LN Nn[)Ju9n0  三、始终牢记——“少即是好(Less is more)并不总是对的”。代码效率虽然很重要,但在许多解决方案中,编写更少的代码并不能改善这些代码的效率,请看下面这个简单的例子: 中文JAVA技术网 C0R,B P!I4y
中文JAVA技术网;M6J9PBXjEvu
if(newStatusCode.equals("SD") && (sellOffDate == null ||todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&todayDate.compareTo(lastUsedDate)>0)) ||(newStatusCode.equals("OBS") && (OBSDate == null ||todayDate.compareTo(OBSDate)<0))){
L!p3E/_ 4R#w(r'@p0~{x7q/n0 中文JAVA技术网C6^v3]"k"Es 中文JAVA技术网"J SYDyu BC U H n]    newStatusCode = "NYP";
*C&t GZ!p F3m0} 中文JAVA技术网+pqZ$l ?~$TZ)b$o]

M$p/gg0W*GI }K1z0  能看明白if条件语句是干什么的吗?能想出来是谁写的这段代码吗?如果把它分成两段独立的if语句,是不是更容易理解呢,下面是修改后的代码:
? vT#p _ @6{4a0 中文JAVA技术网+D*p%y2TrD | [t-|,]
中文JAVA技术网O%uT,K7B }&{1o8svif(newStatusCode.equals("SD") && (sellOffDate == null ||todayDate.compareTo(sellOffDate)<0
中文JAVA技术网CxAnLS[/h || (lastUsedDate != null &&todayDate.compareTo(lastUsedDate)>0))){
(w VH)kb"cO0    newStatusCode = "NYP"; 中文JAVA技术网 F TX-DVC#^
}
else{ 中文JAVA技术网a TN i#d;Ri
    if(newStatusCode.equals("OBS") && (OBSDate == null ||todayDate.compareTo(OBSDate)<0)){
#~+g^KqB0 中文JAVA技术网o:oN"{pmz.q H4t/_bl&I^yJ0        newStatusCode = "NYP";
2o;B6//{C#m` c.S/v0    }
}
2K:M'mvS!Z0^x4F}r0
*P2m"E0|xy0  是不是读起来容易多了呢,在此只是多加了一个if和两个花括号,但代码的可读性与可理解性就一下子提高了一大截。
yp#m.R3nU ~fgX7Y0
7@.Ca&/y1p)Oa!mF0  四、请不要硬编码。 开发者经常有意“忘记”或忽略掉这点,因为有些时候开发日程逼得实在太紧。其实,多写一行定义静态变量的代码能花多少时间呢? 中文JAVA技术网JL,s9e a+R%T8x

*W0ic%Zgp b?0public class A {
!|U5]t[,o[-[0    public static final String S_CONSTANT_ABC = "ABC"; 中文JAVA技术网 g/~"s u"` @XKlZ
    public boolean methodA(String sParam1){ 中文JAVA技术网IZ.NO ~(Q$t
        if (A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){
H]/t7O/M um0            return true; 中文JAVA技术网D t7/KX7Pv%[zI
        } 中文JAVA技术网#G-/i!{BEk
        return false;
c C?A-z(Q9h4b+| a[0    }
-V%U B c:T0} 中文JAVA技术网a f*ucX
中文JAVA技术网,M ?Ji#M.dz"b yQ6[L
  现在,每次需要将“ABC”与 其他变量进行比较时,不必记住实际代码,直接引用A.S_CONSTANT_ABC就行了,而且在今后需要进行修改时,也可在一处修改,不会翻遍整个源代码逐个修改了。
_;z#M;GI}|6m#h:n0
./uF}E$/0  五、不要“创造”自己的框架(framework)。确切来说,有数以千计的各种框架存在,而且大多数是 开源的,这些框架都是优秀的解决方案,可用于日常程序开发中,我们只需使用这些框架的最新版本就行了,至少表面上要跟上形势吧。被大家广为接受的最为明显的一个例子就是 Struts了,这个开源web框架非常适合用在基于web的应用程序中。是不是想开发出自己的Struts呢,还是省点力气吧,回头看看第二条——不要让事情复杂化。另外,如果正在开发的程序只有3个窗口,就不要使用Struts了,对这种程序来说,不需要那么多的“控制”。
G$Ig.C+}0 中文JAVA技术网 O'CM.DXSy$V&]D
  六、不要使用println及字符串连接。通常为了调试方便,开发者喜欢在可能的所有地方都加上System.out.println,也许还会提醒自己回过头来再来删除,但有些时候,经常会忘了删除或者不愿意删除它们。既然使用System.out.println是为了测试,那么测试完之后,为什么还要留着它们呢,因为在删除时,很可能会删除掉真正有用的代码,所以不能低估System.out.println危害啊,请看下面的代码:
F ]?cIy0 中文JAVA技术网/[C8Md7K
public class BadCode { 中文JAVA技术网L k"VhV"A:P
    public static void calculationWithPrint(){
Q Esk POc5/0        double someValue = 0D;
k qjn!F.Hb+/0        for (int i = 0; i <10000; i++) { 中文JAVA技术网.J ZNg#V%I
            System.out.println(someValue = someValue + i); 中文JAVA技术网)? {`*Bl8^~"m
            }
-C(O,gf.Q a:N3^[0       }
4S.e;LF"@H6Mz0    public static void calculationWithOutPrint(){ 中文JAVA技术网 c%Gq2hz jJ,E"XA
        double someValue = 0D;
5^R$_ SYsi0        for (int i = 0; i < 10000; i++) {
%_,cqV(M Y0            someValue = someValue + i; 中文JAVA技术网 H&xVus'B
        } 中文JAVA技术网ur U/qS}]o ah
    }
R3^ X0KU+]0    public static void main(String [] n) {
G6WXQxa{0        BadCode.calculationWithPrint();
$?_ Mk ]jC0        BadCode.calculationWithOutPrint();
-T3gz!^6zK0      }
x$x:q g @3I0} 中文JAVA技术网Y-N|_R/p
中文JAVA技术网8u9_l?!O q$H,M1C
  从测试中可以发现,方法calculationWithOutPrint()执行用了0.001204秒,作为对比,方法calculationWithPrint()执行可是用了10.52秒。
U7mcP],{;@r$U0 中文JAVA技术网:Z+}V,Ra
  要避免浪费CPU时间,最好的方法是引入像如下的包装方法: 中文JAVA技术网`_8E7nT
中文JAVA技术网6k)WAk }
public class BadCode {
yQ(HXs;t(F,qXD0     public static final int DEBUG_MODE = 1;
N&ox.vAD y0        public static final int PRODUCTION_MODE = 2;
(L4tph+K MB!A4Z0        public static void calculationWithPrint(int logMode){ 中文JAVA技术网)b,`?,r&^/`8x,l)];e7rs
        double someValue = 0D; 中文JAVA技术网}4IF#bZf,n
        for (int i = 0; i < 10000; i++) { 中文JAVA技术网"x(}1S T/]$X%};g;FD
            someValue = someValue + i; 中文JAVA技术网 P)rS8GG?Jm
            myPrintMethod(logMode, someValue); 中文JAVA技术网(AA_gN{bz#~&f
        }
A5_x f&~{0    }
n k!{9~6u%i&d:`0    public static void myPrintMethod(int logMode, double value) {
/W;J3V b/X @{3h%P2/0        if (logMode > BadCode.DEBUG_MODE) { return; }
+{t Av|~0        System.out.println(value); 中文JAVA技术网B2D F]0U@8/
    }
_#If /_~[0    public static void main(String [] n) {
B*q W.Y"eNx1W(`.QO u0        BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE);
D&g x3h)e0    } 中文JAVA技术网,Qv V`a^&I*N$CVn
}
C mo4A`)|1zT,o0 中文JAVA技术网 ej!lr6}M,n%z
  另外,字符串连接也是浪费CPU时间的一个大头,请看下面的示例代码: 中文JAVA技术网4T}/D5n7SvI
中文JAVA技术网4Qp/b&gyQC;Xb
public static void concatenateStrings(String startingString) { 中文JAVA技术网$W@0U@9g(eq6bUQ)u1P
    for (int i = 0; i < 20; i++) { 中文JAVA技术网q/_&e x-rc
        startingString = startingString + startingString; 中文JAVA技术网YRTS6pa
    }
cUV S4c7Y2V }
O~%ET#@ wC!?/0public static void concatenateStringsUsingStringBuffer(String startingString) { 中文JAVA技术网3C%NZw]ZK y$U
    StringBuffer sb = new StringBuffer();
UV#wS3B I#f,Z0    sb.append(startingString);
|0/;?[}0    for (int i = 0; i < 20; i++) {
4{%Z.e(L2P6_M4U1_(p0    sb.append(sb.toString());
@#Y*mqE@L!c+X0    } 中文JAVA技术网*aR4J[mhU!u9Vht
}
&we2r0u fb~'Nn4o?0
"_ eu5g B0CI0  在测试中可发现,使用StringBuffer的方法只用了0.01秒执行完毕,而使用连接的方法则用了0.08秒,选择显而易见了。
F(h r|%b2|1N0
Wu TL;JSl0  七、多关注GUI(用户界面)。再三强调,GUI对商业客户来说,与程序的功能及效率同等重要,GUI是一个成功程序的最基本部分,而很多IT经理往往都没注意到GUI的重要性。在现实生活中,许多公司可能为了节省开支,没有雇用那些有着设计“用户友好”界面丰富经验的网页设计者,此时Java开发者只能依赖他们自身的HTML基本功及在此领域有限的知识,结果,很多开发出来的程序都是“计算机友好”甚于“用户友好”。很少有开发者同时精通软件开发及GUI设计,如果你在公司“不幸”被分配负责程序界面,就应该遵守下面三条原则:
4y-g#b#Fn N0
t(x P"GK6EiH'{WY~0  1、 不要再发明一次轮子,即不做无用功。现有的程序可能会有类似的界面需求。
+f7xeO%E)m+_0  2、 先创建一个原型。这是非常重要一步,用户一般想看到他们将使用的东西,而且可以先利用这个原型征求用户的意见,再慢慢修改成用户想要的样子。 中文JAVA技术网!t Z-t@&]:s`
  3、 学会换位思考。换句话来说,就是从用户的角度来审查程序的需求。举例来讲,一个汇总的窗口可以跨页或者不跨页,作为一个软件开发者,可能会倾向于不跨页,因为这样简单一些。但是,从用户的角度来看,可能不希望看到上百行数据都挤在同一页上。 中文JAVA技术网3n&z#E;RjYT

q(sR3U V?z-m0  八、文档需求不放松。每个商业需求都必须记录在案,这可能听上去像童话,似乎在现实生活中很难实现。而我们要做的是,不管开发时间多紧迫,不管最终期限多临近,对每个商业需求都必须记录在案。
+e P1?Tz'U&f6]0 中文JAVA技术网 a3E L|TWO2Y3@
   九、单元测试、单元测试、单元测试。关于什么是单元测试的最好方法,在此不便细说,只是强调,单元测试一定要完成,这也是编程中最基本的原则。当然了,如果有人帮你做单元测试自然是最好,如果没有,就自己来做吧,当创建一个单元测试计划时,请遵守以下三条最基本的原则: 中文JAVA技术网 d Pc$}8UY0R8V7n

Sq-P Y`a%J-O0  1、 先于编写类代码之前编写单元测试。 中文JAVA技术网 ]a s ?/NXE4|h
  2、 记录单元测试中的代码注释。 中文JAVA技术网+A ME9Z%D4@^
  3、 测试所有执行关键功能的公有方法,这里不是指set和get方法,除非它们是以自己独特方式执行set和get方法。 中文JAVA技术网:b7eT z i*P;H
中文JAVA技术网hQd8p'e6u y2x
  十、质量,而不是数量。有些时候因为产品问题、期限紧迫、或一些预料之外的事情,导致常常不能按时下班,但一般而言,公司不会因为雇员经常加班而对之表扬和奖励,公司只看重高质量的工作。如果遵守了前九条原则,你会发现自己写出的代码bug少且可维护性高,无形中质量提高了一大步。 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值