枚举与#define宏的区别

时间:2020-11-22 10:41:35 笔试题目 我要投稿

枚举与#define宏的区别

  1、#define 宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。

  2、一般在编译器里,可以调试枚举常量,但是不能调试宏常量。

  3、枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个。

拓展:

  枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合。举个例子,颜色也可以定义成枚举类型。

  它可以包含你定义的`任何颜色,当需要的时候,只需要通过枚举调用即可。

  另外比如说季节(春夏秋冬)、星期(星期一到星期日)等等这些具有共同投特征的数据都可以定义枚举。

  用法一:常量

  在JDK1.5 之前,我们定义常量都是: publicstaticfianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

  用法二:switch

  JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

  用法三:向枚举中添加新方法

  如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。

  用法四:覆盖枚举的方法

  下面给出一个toString()方法覆盖的例子。

  Java代码

  public enum Color {

  RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

  // 成员变量

  private String name;

  private int index;

  // 构造方法

  private Color(String name, int index) {

  this.name = name;

  this.index = index;

  }

  //覆盖方法

  @Override

  public String toString() {

  return this.index+"_"+this.name;

  }

  }

  用法五:实现接口

  所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。

  用法六:使用接口组织枚举

  Java代码

  public interface Food {

  enum Coffee implements Food{

  BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO

  }

  enum Dessert implements Food{

  FRUIT, CAKE, GELATO

  }

  }

  用法七:关于枚举集合的使用

  java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。

  关于枚举的实现细节和原理请参考:

【枚举与#define宏的区别】相关文章:

枚举和一组预处理的#define有什么不同12-19

Java枚举的常用方法09-21

笔试与面试的区别09-02

京剧与戏曲的区别09-10

戏曲与戏剧的区别09-10

播音与朗诵的区别09-05

美容与化妆的区别10-11

AIA与CPA的区别08-12

AIA与ACCA的区别11-09