黑马程序员技术交流社区

标题: Java开发人员需知的十大戒律 [打印本页]

作者: Tiffany2015    时间: 2015-11-10 00:24
标题: Java开发人员需知的十大戒律
这篇文章主要介绍了Java开发人员需知的十大戒律,较为详细的总结分析了Java开发中常见的注意事项与编程技巧,需要的朋友可以参考下






本文讲述了Java开发人员需知的十大戒律。分享给大家供大家参考,具体如下:
作为一个Java开发人员提高自己代码的质量,可维护性,是个恒久不变的话题,网上看到这篇文章,拿来自勉。
对Java开发者来说,有许多的标准和最佳实践。本文列举了每一个开发人员必须遵从的十大基本法则;如果有了可以遵从的规则而不遵从,那么将导致的是十分悲惨的结局。
1. 在你的代码里加入注释
每个人都知道这点,但不知何故忘记了遵守。算一算有多少次你“忘记”了添加注释?这是事实:注释对程序在功能上没有实质的贡献。但是,你需要一次又一次的回到你两个礼拜之前写的代码上来,可能一辈子都是这样,你一定记不住这些代码为什么会这样。如果这些代码是你的,你还比较的幸运。因为它有可能让你回忆起。但是不幸的是,很多时间,这些代码是别人的,而且很有可能他已经离开了公司。
2. 不要让事情复杂化
我以前就这么干过,而且我相信所有的人都这么干过。开发人员常常为一个简单的问题而提出一个解决方案。我们为仅仅只有5个用户的应用而引入EJBs。我们为一个应用使用框架而它根本不需要。我们加入属性文件,面向对象的解决方案,和线程到应用中,但是它根本不需要这些。为什么我们这样做?我们中的一些人是因为不知道怎么做更好,但是还有一些人这样做的目的是为了学习新的知识,从而使得这个应用对于我们自己来说做得比较有趣。
3. 牢牢记住——“少即是多(less is more)”并不永远是好的
代码的效率是一伟大的事情,但是在很多情况下,写更少的代码行并不能提高该代码的效率。请让我向你展示一个简单的例子。
?
1
2
3
4
5
6
7
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))){
   newStatusCode = "NYP";
}




我想问一句:说出上面的那段代码的if条件想干什么容易吗?现在,我们再来假设无论是谁写出这段代码,而没有遵从第一条规则——在你的代码里加入注释。
如果我们把这个条件分到两个独立的if陈述句中,难道不是更简单一些吗?现在,考虑下面的修正代码:
?
1
2
3
4
5
6
7
8
9
10
if(newStatusCode.equals("SD") && (sellOffDate == null ||
todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&
todayDate.compareTo(lastUsedDate)>0))){
   newStatusCode = "NYP";
}else
if(newStatusCode.equals("OBS") && (OBSDate == null ||
todayDate.compareTo(OBSDate)<0))
{
   newStatusCode = "NYP";
}




难道它不是有了更好的可读性?是的,我们重复了陈述条件。是的,我们多出了一个多余的“IF”和两对多余的括弧。但是代码有了更好的可读性和可理解性。
4. 请不要有硬代码
开发人员常常有意识的忘记或者忽视这条规则,原因是我们,和一般时候一样,在赶时间。如果我们遵从这条规则,我们可能会赶不上进度。我们可能不能结束我们的当前状态。但是写一条额外的定义静态常量的代码行又能花费我们多少时间呢?
这里有一个例子。
?
1
2
3
4
5
6
7
8
9
public class A {
  public static final String S_CONSTANT_ABC = "ABC";
  public boolean methodA(String sParam1){
   if(A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){
return true;
   }  
   return false;
  }
}




现在,每一次我们需要和某一些变量比较字符串“ABC”的时候,我们只需要引用S_CONSTANT_ABC,而不是记住实际的代码是什么。它还有一个好处是:更加容易在一个地方修改常量,而不是在所有的代码中寻找这个代码。
5. 不要发明你自己的frameworks
已经推出了几千种frameworks,而且它们中的大多数是开源的。这些frameworks中间有很多是极好的解决方案,被应用到成千上万的应用中。你们需要跟上这些新frameworks的步伐,最起码是肤浅的。在这些极好的、应用广泛的frameworks中间,一个最好的、最直接的例子是Struts。在你所能想象到的frameworks中,这个开源的web frameworks对于基于web的应用是一个完美的候选者。但是你必须记住第二条规则——不要让事情复杂化。如果你开发的应用只有三个页面—请,不要使用Struts,对于这样一个应用,没有什么“控制”请求的。
6. 不要打印行和字符串相加
我知道,为了调试的目的,开发人员喜欢在每一个我们认为适合的地方添加System.out.println,而且我们会对我们自己说,会在以后删掉这些代码的。但是我们常常忘掉删去这些代码行,或者我们根本就不想删掉它们。我们使用System.out.println来测试,当我们测试完成以后,为什么我们还能接触到它们呢?我们可能删掉一行我们实际需要的代码,仅仅是因为你低估了System.out.println所带来的伤害,考虑下面的代码:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class BadCode {
  public static void calculationWithPrint(){
   double someValue = 0D;
   for (int i = 0; i < 10000; i++) {
System.out.println(someValue = someValue + i);
   }
  }
  public static void calculationWithOutPrint(){
   double someValue = 0D;
   for (int i = 0; i < 10000; i++) {
someValue = someValue + i;
   }
  }
  public static void main(String [] n) {
   BadCode.calculationWithPrint();
   BadCode.calculationWithOutPrint();
  }
}




在下面的表格中,你能够看到calculationWithOutPrint()方法的运行花了0.001204秒。相比较而言,运行calculationWithPrint()方法花了令人惊讶的10.52秒。
(如果你不知道怎么得到一个像这样的表格,请参阅我的文章“Java Profiling with WSAD” Java Profiling with WSAD)
避免这样一个CPU浪费的最好方法是引入一个包装器方法,就象下面这样
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class BadCode {
public static final int DEBUG_MODE = 1;
public static final int PRODUCTION_MODE = 2;
public static void calculationWithPrint(int logMode){   
  double someValue = 0D;
  for(int i = 0; i < 10000; i++) {
   someValue = someValue + i;
   myPrintMethod(logMode, someValue);
  }
}
public static void myPrintMethod(int logMode, double value) {
  if (logMode > BadCode.DEBUG_MODE) { return; }
  System.out.println(value);  
}
public static void main(String [] n) {
   BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE);
}
}









作者: nice非飞    时间: 2015-11-10 00:41
围观。。。。
作者: 王竹根    时间: 2015-11-10 00:43
不错。。。。。。。。。。。。。。
作者: qingqing    时间: 2015-11-10 01:20
学习了,谢谢~~~
作者: Barnard    时间: 2015-11-10 02:10
哎呦,总结不错呦
作者: lkjmnbqwe    时间: 2015-11-10 03:24
进来看看大神门的东东
作者: li3N    时间: 2015-11-10 08:49
学习了,多谢楼主
作者: 洋葱头头    时间: 2015-11-10 11:06
一群水笔
作者: xingui66    时间: 2015-11-10 13:09
楼主威武,楼主加油,像楼主看齐




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2