枚举类型是一种特殊的数据类型。具有枚举类型的变量,其取值范围会被限定在预定义的常量池中。该变量的值必须为预定义取值的其中之一。常见的例子有指南针的方向(东,西,南,北)和星期几。

由于是常量,枚举类型中定义的字段均为大写字母。

在Java编程语言中,通过关键字 enum 来定义一个枚举类型。例如,定义一个一周有几天的枚举类型:

public enum Day {

SUNDAY, MONDAY, TUESDAY, WEDNESDAY,

THURSDAY, FRIDAY, SATURDAY

}

在任何需要定义一个限定常量池的场景下,你就需要用到枚举类型。这包括自然界的枚举类型,例如银河系的星球,编译时就知道所有取值情况的数据集合——例如,一个菜单的选项,命令行标记等等。

这里给出一个以上定义的Day枚举类型应用实例:

public class EnumTest {

Day day;

public EnumTest(Day day) {

this.day = day;

}

public void tellTheTruth() {

switch (day) {

case MONDAY:

System.out.println("Mondays are bad if my husband is not around.");

break;

case FRIDAY:

System.out.println("Fridays are better if my husband could have dinner with me.");

break;

case SATURDAY: case SUNDAY:

System.out.println("Weekends are best if my husband is by my side.");

break;

default:

System.out.println("Midweek days are good if my husband is able to have lunch with me.");

break;

}

}

public static void main(String[] args) {

EnumTest firstDay = new EnumTest(Day.MONDAY);

firstDay.tellTheTruth();

EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);

thirdDay.tellTheTruth();

EnumTest fifthDay = new EnumTest(Day.FRIDAY);

fifthDay.tellTheTruth();

EnumTest sixthDay = new EnumTest(Day.SATURDAY);

sixthDay.tellTheTruth();

EnumTest seventhDay = new EnumTest(Day.SUNDAY);

seventhDay.tellTheTruth();

}

}

输出为:

Mondays are bad if my husband is not around.

Midweek days are good if my husband is able to have lunch with me.

Fridays are better if my husband could have dinner with me.

Weekends are best if my husband is by my side.

Weekends are best if my husband is by my side.

Java编程语言中的枚举类型比其他语言中的同种类型更为强大。enum在声明时定义了一个类(称为一个枚举类型)。枚举类可以包含方法以及其他属性。在创建一个枚举时编译器会自动添加一些特殊方法。例如,它们都有一个静态的 values 方法,这个方法会按定义时的顺序返回枚举中的所有值。这个方法常与 for-each 连用以遍历一个枚举类型中的所有值。例如,下面这段选自 Planet 类的代码遍历了太阳系的所有星球。

for (Planet p : Planet.values()) {

System.out.printf("Your weight on %s is %f%n",

p, p.surfaceWeight(mass));

}

注意: 所有枚举隐式继承 java.lang.Enum. 由于一个类只能有一个父类,Java语言不支持多继承,所以枚举不能继承其他类。

在接下来的例子中,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 ");

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));

}

}

如果从命令行运行Planet.class并且输入参数175,会得到以下输出:

$ java Planet 175

Your weight on MERCURY is 66.107583

Your weight on VENUS is 158.374842

Your weight on EARTH is 175.000000

Your weight on MARS is 66.279007

Your weight on JUPITER is 442.847567

Your weight on SATURN is 186.552719

Your weight on URANUS is 158.397260

Your weight on NEPTUNE is 199.207413

男 女 java 枚举_献给我老公 - Java枚举类型相关推荐

  1. java后端参数默认值添加枚举_利用自定义Validator和枚举类来限定接口的入参

    趁热记录下,给未来的自己 0. 前言 Spring Validation 作为一个参数验证框架,本身提供的注解已经很强大了,能覆盖大部分业务场景需求,比如:@NotNull, @NotBlank, @ ...

  2. mysql 字段值不同枚举_【mysql】关于枚举值 '1','0'的神奇判断

    背景与探索 最近在做一个简单的用户信息的查询及展示,其中在对用户性别判断的时候,出现了一个神奇的情况,首先数据库里有个表存储了性别字段 sex ,字段类型是:enum('0','1') DEFAULT ...

  3. Java继承_这10道Java面试题!大部分的人回答不出来

    1.为什么等待和通知是在 Object 类而不是 Thread 中声明的? 2.为什么Java中不支持多重继承? 3.为什么Java不支持运算符重载? 4.为什么 String 在 Java 中是不可 ...

  4. java风控_【A0538】[java视频教程]金融信贷风控的机器学习实战视频教程 it教程

    Java视频教程名称:金融信贷风控的机器学习实战视频教程  java自学   风控视频教程   it教程 7 E" b1 z7 `/ _& G百度网盘下载链接:8 }, g4 o5 ...

  5. 怎样重java初级到java中级_(续)Java进阶之路--从初级菜鸟到高级工程师

    基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法. 1.一个".java"源文件中是否可以包括 ...

  6. 我的世界java路径_我的世界java路径在哪 路径有误怎么设置

    我的世界的各个版本中java都是十分重要的东西,许多玩家都会遇到Java路径有误的问题,并且不知道该如何解决,其实Java的路径这个东西在每个人的电脑中都是不太一样的,一般以你安装时的位置为准,在这里 ...

  7. 如何创建第一个java程序_创建第一个java程序

    开发环境:ubuntu 10.04 + eclipse 方法一:打开eclipse编译器,选择 File->New->Java project,输入工程名称,点击finish,在工程目录中 ...

  8. 常用的java虚拟机_带你了解 JAVA虚拟机 面试必备

    Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途.创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有 些区域则是依赖 ...

  9. vs java调试_基于VSCode的Java编程语言的构建调试环境搭建指南(作业三)

    1.Java编译环境的搭建(CodeRunner) CodeRunner的强大之处在于它支持许多语言,只要选好语言,就直接可以写代码,即开即用的模式.时至今日,Code Runner已经有了超过400 ...

最新文章

  1. 关于python中的作用域问题
  2. docker nginx部署前端项目
  3. 网易盖楼回复的简易实现
  4. 就是你把所有代码全写在一个类里的?
  5. 为博客的文章添加二维码
  6. “许巍日”新歌提前曝光 《爱如少年》10/15温暖登场!
  7. SAP Fiori s2 controller init
  8. 机器学习中的无监督学习_无监督机器学习中聚类背后的直觉
  9. 表变量和临时表的使用
  10. Java并发编程实战~并发容器
  11. 用python实现websocket请求遇到的问题及解决方法。
  12. proxool,好东西
  13. mybatis添加数据时返回主键 insert 返回主键值
  14. 想要快速扒谱?快来掌握这些小技巧吧!
  15. 功率谱估值方法matlab仿真——2、经典估值方法介绍
  16. oracle数据库存储过程基本语法
  17. 我的CSDN博客文章,被大学老师、本科生、公司 “引用“ 了!
  18. 【WCN685X】WCN685X WiFi 6E 6G信道与频宽对应关系
  19. 如何利用RTK通过CORS进行测量?
  20. RouterOS(ROS)+OpenWRT(LEDE)双软路由奶妈级配置

热门文章

  1. vim编辑器替换以及全局替换
  2. 【2021版】想要专升本你不得不看的全干货_吐血整理_专升本_计算机文化基础(二)
  3. 淘宝标题核心关键词怎么做?大神导航,一个神奇的网站,从此开启大神之路!
  4. 北京同创蓝天的全景航拍技术如何?应用在哪些方面呢?
  5. Selenium PO模式实现
  6. 攻防世界之互相伤害!!!
  7. 读javascript高级程序设计02-变量作用域
  8. 通用计算机含义,当今的计算机其通用的名称应该是通用数字计算机,请简单描述包含的三层含义? (8.0分)...
  9. 搭建商城的微服务架构-2
  10. 最简单的ESP8266的Wifi智能小车车教程