javaSE_8系列博客——Java语言的特性(三)--类和对象(21)--枚举类型
来源:互联网 发布:最近网络贷款诈骗案例 编辑:程序博客网 时间:2024/06/01 09:01
枚举类型是一种特殊的数据类型,可使变量成为一组预定义的常量。变量必须等于为其预定义的值之一。常见的例子包括罗盘上的方向(NORTH,SOUTH,EAST和WEST的值)和星期几。 因为它们是常量,所以枚举类型的字段的名称是大写字母。 在Java编程语言中,您可以使用枚举关键字定义枚举类型。例如,您将指定一个星期的枚举类型为:
public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
任何时候你需要使用多个固定的常量,应该考虑使用枚举类型。这包括自然枚举类型,如我们的太阳系中的行星和数据集,您可以在编译时知道所有可能的值 - 例如菜单上的选项,命令行标志等。 以下代码,显示如何使用上面定义的日期枚举:
public class EnumTest { Day day; public EnumTest(Day day) { this.day = day; } public void tellItLikeItIs() { switch (day) { case MONDAY: System.out.println("Mondays are bad."); break; case FRIDAY: System.out.println("Fridays are better."); break; case SATURDAY: case SUNDAY: System.out.println("Weekends are best."); break; default: System.out.println("Midweek days are so-so."); break; } } public static void main(String[] args) { EnumTest firstDay = new EnumTest(Day.MONDAY); firstDay.tellItLikeItIs(); EnumTest thirdDay = new EnumTest(Day.WEDNESDAY); thirdDay.tellItLikeItIs(); EnumTest fifthDay = new EnumTest(Day.FRIDAY); fifthDay.tellItLikeItIs(); EnumTest sixthDay = new EnumTest(Day.SATURDAY); sixthDay.tellItLikeItIs(); EnumTest seventhDay = new EnumTest(Day.SUNDAY); seventhDay.tellItLikeItIs(); }}
输出的结果为:
Mondays are bad.Midweek days are so-so.Fridays are better.Weekends are best.Weekends are best.
Java编程语言枚举类型比其他语言的类型更强大。枚举声明定义一个类(称为枚举类型)。枚举类体可以包括方法和其他字段。编译器在创建枚举时会自动添加一些特殊的方法。例如,它们具有一个静态值方法,它返回一个包含枚举所有值的数组,并按它们被声明的顺序。该方法通常与for-each结构组合使用以迭代枚举类型的值。例如,来自“Plannet”类的示例代码遍历太阳系中的所有行星。
for (Planet p : Planet.values()) { System.out.printf("Your weight on %s is %f%n", p, p.surfaceWeight(mass));}
注意:
所有枚举都会隐式继承java.lang.Enum。因为一个类只能继承一个父类(请参阅声明类),所以Java语言不支持状态的多重继承(参见State,Implementation和Type的多重继承),因此枚举不能扩展其他任何内容。
在下面的例子中,“Planet”是表示太阳系中行星的枚举类型。它们被定义为恒定的质量和半径属性。 每个枚举常数都被声明为质量和半径参数的值。当创建常量时,这些值将传递给构造函数。 Java要求在任何字段或方法之前首先定义常量。此外,当有字段和方法时,枚举常量的列表必须以分号结尾。
注意:
枚举类型的构造函数必须是包私有或私有访问。它会自动创建在枚举正文开头定义的常量。你不能自己调用枚举构造函数。
除了其属性和构造函数之外,“Planet”还有一些方法可以检索每个星球上物体的表面重力和重量。这里是一个示例程序,可以在地球上(以任何单位)体重,并计算并打印所有行星的重量(在同一单位):
public enum Planet { MERCURY (3.303e+23, 2.4397e6), VENUS (4.869e+24, 6.0518e6), EARTH (5.976e+24, 6.37814e6), MARS (6.421e+23, 3.3972e6), JUPITER (1.9e+27, 7.1492e7), SATURN (5.688e+26, 6.0268e7), URANUS (8.686e+25, 2.5559e7), NEPTUNE (1.024e+26, 2.4746e7); private final double mass; // in kilograms private final double radius; // in meters Planet(double mass, double radius) { this.mass = mass; this.radius = radius; } private double mass() { return mass; } private double radius() { return radius; } // universal gravitational constant (m3 kg-1 s-2) public static final double G = 6.67300E-11; double surfaceGravity() { return G * mass / (radius * radius); } double surfaceWeight(double otherMass) { return otherMass * surfaceGravity(); } public static void main(String[] args) { if (args.length != 1) { System.err.println("Usage: java Planet <earth_weight>"); System.exit(-1); } double earthWeight = Double.parseDouble(args[0]); double mass = earthWeight/EARTH.surfaceGravity(); for (Planet p : Planet.values()) System.out.printf("Your weight on %s is %f%n", p, p.surfaceWeight(mass)); }}
$ java Planet 175Your weight on MERCURY is 66.107583Your weight on VENUS is 158.374842Your weight on EARTH is 175.000000Your weight on MARS is 66.279007Your weight on JUPITER is 442.847567Your weight on SATURN is 186.552719Your weight on URANUS is 158.397260Your weight on NEPTUNE is 199.207413
阅读全文
0 0
- javaSE_8系列博客——Java语言的特性(三)--类和对象(21)--枚举类型
- javaSE_8系列博客——Java语言的特性(三)--类和对象(21)--何时使用Lambda 表达式?
- javaSE_8系列博客——Java语言的特性(三)--类和对象(9)--对象的创建
- javaSE_8系列博客——Java语言的特性(三)--类和对象(10)--对象的使用
- javaSE_8系列博客——Java语言的特性(三)--类和对象(8)--对象
- javaSE_8系列博客——Java语言的特性(三)--类和对象(3)--类的声明
- javaSE_8系列博客——Java语言的特性(三)--类和对象(13)--理解类的成员
- javaSE_8系列博客——Java语言的特性(三)--类和对象(2)--类(宏观概述)
- javaSE_8系列博客——Java语言的特性(三)--类和对象(15)--嵌套类
- javaSE_8系列博客——Java语言的特性(三)--类和对象(1)--概述
- javaSE_8系列博客——Java语言的特性(三)--类和对象(4)--声明成员变量
- javaSE_8系列博客——Java语言的特性(三)--类和对象(5)--定义方法
- javaSE_8系列博客——Java语言的特性(三)--类和对象(11)--从方法返回值
- javaSE_8系列博客——Java语言的特性(三)--类和对象(12)--使用this关键字
- javaSE_8系列博客——Java语言的特性(三)--类和对象(14)--初始化字段
- javaSE_8系列博客——Java语言的特性(三)--类和对象(16)--嵌套类(内部类的示例)
- javaSE_8系列博客——Java语言的特性(三)--类和对象(6)--为你的类提供构造函数
- javaSE_8系列博客——Java语言的特性(三)--类和对象(12)--类成员的访问控制
- 快速幂取模
- 双摄像头采集
- 合并两个有序的数列并删除重复数据
- SSL2280 极值问题(递推,斐波那契)
- chrom 之flash 更新
- javaSE_8系列博客——Java语言的特性(三)--类和对象(21)--枚举类型
- 2006年分区联赛普级组之三 JAM计数法(模拟)
- windows+Apache部署django项目
- Java图形界面——绘图技术演示
- 2004年分区联赛提高组之一 津津的储蓄计划(模拟)
- android 日期时间选择器
- Java图形界面——事件监听与处理
- 高性能嵌入式web服务器
- android 解决小米手机上选择照片路径为null的问题