大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: 常量设置

有时候您会需要定义一些常量供程序使用,您可以使用接口或类来定义,例如定义操作常量:
  • OpConstants.java
public interface OpConstants { 
public static final int TURN_LEFT = 1;
public static final int TURN_RIGHT = 2;
public static final int SHOOT = 3;
}

常量必须是可以直接取用,并且不可被修改的,所以我们在声明时加上 staticfinal,事实上,对于接口来说,当中的常量默认就为public、static、final,即使您没有明确指定修饰,例如下例与上例是一样的:

  • OpConstants.java
public interface OpConstants { 
int TURN_LEFT = 1;
int TURN_RIGHT = 2;
int SHOOT = 3;
}

这意谓着如果您实现的接口中有定义常量,您不可以重新指定该常量值,例如下例是错误的…
interface ISome {
    int const = 10;
    ...
}

public class Some implements ISome {
    public Some() {
        const = 20;  // 这行是错的
    }
}

声明常量之后,就可以在程序中直接使用 OperateConstants.TURN_LEFT之类的名称来取代常量值,例如:
public void someMethod() {
     ....
    doOp(OpConstants.TURN_RIGHT);
    ....
}
 
public void doOp(int op) {
    switch(op) {
        case OpConstants.TURN_LEFT:
            System.out.println("向左转");
            break;
        case OpConstants.TURN_RIGHT:
            System.out.println("向右转");
            break;
        case OpConstants.SHOOT:
            System.out.println("射击");
            break;
    }
}

如果使用类来声明的话,方法也是类似,例如:
  • OpConstants.java
public class OpConstants { 
public static final int TURN_LEFT = 1;
public static final int TURN_RIGHT = 2;
public static final SHOOT = 3;
}

对于简单的常量设置,上面的作法已经足够了,不过在 J2SE 5.0 中新增了 枚举类型(Enumerated Types),使用枚举类型,除常量设定的功能之外,您还可以获得像编译时期类型检查等的更多好处。