JAVA-Enum

news/2024/5/18 21:51:44 标签: enum, class, java, javase, 枚举
class="baidu_pl">
class="article_content clearfix">
class="markdown_views prism-atom-one-light">

枚举常量是枚举类型中的值,即枚举值。枚举类型是一种用户定义的类型,只有用户在程序中定义它后才能被使用。用户通常利用枚举类型定义程序中需要使用的一组相关的符号常量。枚举类型的定义格式为:
class="tags" href="/tags/ENUM.html" title=enum>enum { };
它是一条枚举类型定义语句,该语句以class="tags" href="/tags/ENUM.html" title=enum>enum保留字开始,接着为枚举类型名,它是用户命名的一个标识符,以后就直接使用它表示该类型,枚举类型名后为该类型的定义体,它是由一对花括号和其中的枚举表所组成,枚举表为一组用逗号分开的由用户命名的符号常量,每个符号常量又称为枚举常量或枚举值。如:
(1) class="tags" href="/tags/ENUM.html" title=enum>enum color{red, yellow, blue};
(2) class="tags" href="/tags/ENUM.html" title=enum>enum day{Sun, Mon, Tues, Wed, Thur, Fri, Sat};
第一条语句定义了一个枚举类型color,用来表示颜色,它包含三个枚举值red,yellow和blue,分别代表红色、黄色和兰色。
第二条语句定义了一个枚举类型day,用来表示日期,它包含7个枚举值,分别表示星期日、星期一至星期六。
一种枚举类型被定义后,可以象整型等预定义类型一样使用在允许出现数据类型的任何地方。如可以利用它定义变量。
(1) class="tags" href="/tags/ENUM.html" title=enum>enum color c1, c2,c3;
(2) class="tags" href="/tags/ENUM.html" title=enum>enum day today, workday;
(3) c1=red;
(4) workday=Wed;
第一条语句开始的保留字class="tags" href="/tags/ENUM.html" title=enum>enum和类型标识符color表示上述定义的枚举类型color,其中class="tags" href="/tags/ENUM.html" title=enum>enum可以省略不写,后面的三个标识符c1,c2和c3表示该类型的三个变量,每一个变量用来表示该枚举表中列出的任一个值。
第二条语句开始的两个成分(成分之间的空格除外)表示上述定义的枚举类型day,同样class="tags" href="/tags/ENUM.html" title=enum>enum可以省略不写,后面的两个标识符today和workday表示该类型的两个变量,每一个变量用来表示该枚举表中列出的七个值中的任一个值。
第三条语句把枚举值red赋给变量c1,第四条语句把枚举值Wed赋给变量workday。
在一个枚举类型的枚举表中列出的每一个枚举常量都对应着一个整数值,该整数值可以由系统自动确认,也可以由用户指定。若用户在枚举表中一个枚举常量后加上赋值号和一个整型常量,则就表示枚举常量被赋予了这个整型常量的值。如:
class="tags" href="/tags/ENUM.html" title=enum>enum day{Sun=7, Mon=0, Tues, Wed, Thur, Fri, Sat};
用户指定了Sun的值为7,Mon的值为0。
若用户没有给一个枚举常量赋初值,则系统给它赋予的值是它前一项枚举常量的值加1,若它本身就是首项,则被自动赋予整数0。如对于上述定义的color类型,red,yellow和blue的值分别为0,1和2;对于刚被修改定义的day类型,各枚举常量的值依次为7,0,1,2,3,4,5,6。
由于各枚举常量的值是一个整数,所以可把它同一般整数一样看待,参与整数的各种运算。又由于它本身是一个符号常量,所以当作为输出数据项时,输出的是它的整数值,而不是它的标识符,这一点同输出其他类型的符号常量是一致的。

class="prettyprint">class=" hljs cs">class="hljs-keyword">public class="hljs-keyword">class="tags" href="/tags/ENUM.html" title=enum>enum Gender {
    女,男
}

class="hljs-keyword">public class="hljs-keyword">class Student {

    class="hljs-keyword">private class="hljs-keyword">int age;
    class="hljs-keyword">private Gender gender;
    class="hljs-keyword">public class="hljs-title">Student(class="hljs-keyword">int age, Gender gender) {
        super();
        class="hljs-keyword">this.age = age;
        class="hljs-keyword">this.gender = gender;
    }
    class="hljs-keyword">public class="hljs-keyword">int class="hljs-title">getAge() {
        class="hljs-keyword">return age;
    }
    class="hljs-keyword">public class="hljs-keyword">void class="hljs-title">setAge(class="hljs-keyword">int age) {
        class="hljs-keyword">this.age = age;
    }
    class="hljs-keyword">public Gender class="hljs-title">getGender() {
        class="hljs-keyword">return gender;
    }
    class="hljs-keyword">public class="hljs-keyword">void class="hljs-title">setGender(Gender gender) {
        class="hljs-keyword">this.gender = gender;
    }
    @Override
    class="hljs-keyword">public String class="hljs-title">toString() {
        class="hljs-keyword">return class="hljs-string">"Student [age=" + age + class="hljs-string">", gender=" + gender + class="hljs-string">"]";
    }

}


class="hljs-keyword">public class="hljs-keyword">static class="hljs-keyword">void class="hljs-title">main(String[] args) {
        class="hljs-comment">//实例化一个对象,使用枚举类型赋值
        Student student = class="hljs-keyword">new Student(class="hljs-number">12, Gender.男);
        System.class="hljs-keyword">out.println(student);
        class="hljs-comment">//得到枚举数据的整型值
        System.class="hljs-keyword">out.println(Gender.女.ordinal());
        System.class="hljs-keyword">out.println(Gender.男.ordinal());
        class="hljs-comment">//枚举类型的静态方法,返回该类型的所有数据的数组
        System.class="hljs-keyword">out.println(Arrays.toString(Gender.values()));
        System.class="hljs-keyword">out.println(Gender.values()[class="hljs-number">1]);
}

http://www.niftyadmin.cn/n/1480877.html

相关文章

Linux likely unlikely

/************************************************************************** Linux likely unlikely* 说明:* 在阅读一些源代码的时候经常会遇到likely和unlikely,一直也没有去进一步* 跟踪其工作机制,于是今…

JAVA-集合学习整理

collection(收藏) 作用:用来处理程序中各种类型的对象集合的。 Iterator 迭代器 在集合框架中,我们可以通过Iterator 容器的迭代器对容器中的元素进行遍历。 所有可以使用Iterator进行迭代的集合,都必须实现Iterab…

vnc 简单安装及配置

因工作需要,配置VPC,好多年没用过VNC了,所以梳理整理一下,以防止以后再用1.安装vnc server查看系统是否安装:rpm -qa | grep vnc如果没有,则执行:yum install vnc-server# rpm -qa | grep vnc-s…

使用validate.js验证并用ajax提交表单的实例

使用时需要依赖jQuery库 验证规则: var validator $("#form").validate({   rules:{     name: {       required: true     },     email: {        required: true,       email:true     },     message: { …

JAVA-多线程-线程与进程

1:程序:是一个静态的概念。可以理解为一个计算机指令的集合。 2:进程:程序的一次执行就是一个进程。会向cpu 申请相应的资源,申请内存地址。 每个进程都是独立的。多个进程并发执行。(并发只是我们宏观上的感受,微观…

最大子序列和最大子矩阵

最大子序列: 问题描述:给定整数序列:a1,a2,a3,...an(可能有负数),求a1~an的一个子序列ai~aj,使其和最大 我们很容易得到一个O(n^2)的暴力算法,但是注意到,每次在对s求和时,可能遇到部分和小于0,这样的话,显然应该舍弃前面的部分和序列,重新置s0,并继续扫描下一个数,…

JAVA-多线程-生命周期

1:新建 当一个线程TicktThread1 thread1 new TicktThread1(“窗口1”, ticket); 被new 出来的时候。线程就是一个新建的状态。 2:就绪状态:当调用了start 方法之后。进入就绪状态。 就绪状态是什么状态:某一个时刻cpu 只能处理…

JAVA-多线程-线程控制

1.线程优先级 优先级最大值为10,最小值为1,默认为5,设置线程的优先级,不要超过它的取值范围,不然会抛出异常。 优先级高的线程,会优先得到 cup 的时间片的控制权。 RabbitThread rabbitThread new Rabb…