科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道审查Java 代码的十一种常见错误2

审查Java 代码的十一种常见错误2

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

 代码审查是消灭Bug最重要的方法之一,这些审查在大多数时候都特别奏效。本文就常见的Java代码中容易出现的问题提出一些建设性建议,以便您在审查代码的过程中注意到这些常见的细节性错误。

来源:IT专家网 2008年5月12日

关键字: 错误 代码 审查 java

  • 评论
  • 分享微博
  • 分享邮件
 常见错误3:不必要的克隆

  我们现在知道了get方法应该返回内部数据对象的拷贝,而不是引用。但是,事情没有绝对:

/*** Example class.The value should never * be negative.*/
public class Example{
 private Integer i = new Integer (0);
 public Example (){ }
 /*** Set x. x must be nonnegative* or an exception will be thrown*/
 public synchronized void setValues (int x)
 throws IllegalArgumentException{
  if (x < 0)
   throw new IllegalArgumentException();
   i = new Integer (x);
 }
 public synchronized Integer getValue(){
  // We can’t clone Integers so we makea copy this way.
  return new Integer (i.intValue());
 }
}

  这段代码是安全的,但是就象在错误1#那样,又作了多余的工作。Integer对象,就象String对象那样,一旦被创建就是不可变的。因此,返回内部Integer对象,而不是它的拷贝,也是安全的。

  方法getValue()应该被写为:

public synchronized Integer getValue(){
// ’i’ is immutable, so it is safe to return it instead of a copy.
return i;
}

  Java程序比C++程序包含更多的不可变对象。JDK 所提供的若干不可变类包括:

  •Boolean
  •Byte
  •Character
  •Class
  •Double
  •Float
  •Integer
  •Long
  •Short
  •String
  •大部分的Exception的子类

常见错误4:自编代码来拷贝数组

  Java允许你克隆数组,但是开发者通常会错误地编写如下的代码,问题在于如下的循环用三行做的事情,如果采用Object的clone方法用一行就可以完成:

public class Example{
 private int[] copy;
 /*** Save a copy of ’data’. ’data’ cannot be null.*/
 public void saveCopy (int[] data){
  copy = new int[data.length];
  for (int i = 0; i < copy.length; ++i)
   copy[i] = data[i];
 }
}

  这段代码是正确的,但却不必要地复杂。saveCopy()的一个更好的实现是:

void saveCopy (int[] data){
 try{
  copy = (int[])data.clone();
 }catch (CloneNotSupportedException e){
  // Can’t get here.
 }
}

  如果你经常克隆数组,编写如下的一个工具方法会是个好主意:

static int[] cloneArray (int[] data){
 try{
  return(int[])data.clone();
 }catch(CloneNotSupportedException e){
  // Can’t get here.
 }
}

  这样的话,我们的saveCopy看起来就更简洁了:

void saveCopy (int[] data){
 copy = cloneArray ( data);

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章