资讯专栏INFORMATION COLUMN

Java™ 教程(枚举类型)

Cristalven / 2261人阅读

枚举类型

枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量,变量必须等于为其预定义的值之一,常见示例包括罗盘方向(NORTHSOUTHEASTWEST的值)和星期。

因为它们是常量,所以枚举类型字段的名称是大写字母。

在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 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构造结合使用,以迭代枚举类型的值。例如,下面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
上一篇:Lambda表达式 下一篇:注解

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72473.html

相关文章

  • Java教程(创建和使用包)

    包 本课程解释了如何将类和接口捆绑到包中,如何使用包中的类,以及如何安排文件系统以便编译器可以找到源文件。 创建和使用包 为了使类型更易于查找和使用,避免命名冲突和控制访问,程序员将相关类型的组捆绑到包中。 定义:包是一组提供访问保护和名称空间管理的相关类型,请注意,类型引用类、接口、枚举和注解类型,枚举和注解类型分别是特殊的类和接口,因此在本课中通常将类型简称为类和接口。 作为Java平台一部...

    617035918 评论0 收藏0
  • Java教程(目录)

    Java™ 教程 Java教程是为JDK 8编写的,本页面中描述的示例和实践没有利用在后续版本中引入的改进。 Java教程是希望使用Java编程语言创建应用程序的程序员的实用指南,其中包括数百个完整的工作示例和数十个课程,相关课程组被组织成教程。 覆盖基础知识的路径 这些教程以书籍的形式提供,如Java教程,第六版,前往Amazon.com购买。 入门 介绍Java技术和安装Java开发软件并使用...

    lifesimple 评论0 收藏0
  • switch case 支持的 6 种数据类型

    摘要:中语句用来判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。使用包装类型使用枚举类型以下为官网的介绍文档。里面必须跟,不然程序会一个个执行下去,直到最后一个的或者出现。 有粉丝建议可以偶尔推送一些 Java 方面的基础知识,一方面可以帮助一初学者,也可以兼顾中高级的开发者。 那么今天就讲一下 Java 中的 switch case 语句吧,有忘记的同学正好可以温习一下。 Ja...

    hss01248 评论0 收藏0
  • Java教程(管理源文件和类文件)

    管理源文件和类文件 Java平台的许多实现依赖于分层文件系统来管理源文件和类文件,尽管Java语言规范不要求这样做,策略如下。 将类、接口、枚举或注解类型的源代码放在文本文件中,该文件的名称是类型的简单名称,其扩展名为.java,例如: //in the Rectangle.java file package graphics; public class Rectangle { ... ...

    ghnor 评论0 收藏0
  • JAVA笔记 - 收藏集 - 掘金

    摘要:动态代理个经纪人如何代理个明星掘金在代理模式女朋友这么漂亮,你缺经纪人吗中我们用宝强的例子介绍了静态代理模式的概念。掘金使用从头创建一个,这种方法比较简单。 动态代理:1 个经纪人如何代理 N 个明星 - Android - 掘金在 代理模式:女朋友这么漂亮,你缺经纪人吗? 中我们用宝强的例子介绍了静态代理模式的概念。 本来我的目的是通过大家耳熟能详的例子来加深理解,但是有些网友指责...

    kamushin233 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<