java中枚举的详细使用介绍

2016-02-19 10:04 7 1 收藏

下面是个超简单的java中枚举的详细使用介绍教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - 编程语言 】

枚举特点

1.用enum定义枚举类默认继承了java.lang.Enum类而不是继承了Object类。其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口

2.枚举类的构造函数只能使用private访问修饰符,如果省略了其构造器的访问控制符,则默认使用private修饰;

3.枚举类的所有实例必须在枚举类中显式列出,否则这个枚举类将永远都不能产生实例。列出这些实例时,系统会自动添加public static final修饰,无需程序员显式添加。
代码如下:

public enum Week {
    MON{
        public String toLocaleString(){
            return "星期一";
        }
    },TUES{
        public String toLocaleString(){
            return "星期二";
        }
    },WEB{
        public String toLocaleString(){
            return "星期三";
        }

    },THUR{
        public String toLocaleString(){
            return "星期四";
        }

    },FRI{
        public String toLocaleString(){
            return "星期五";
        }

    },SAT{
        public String toLocaleString(){
            return "星期六";
        }

    },SUN{
        public String toLocaleString(){
            return "星期日";
        }

    };
    public abstract String toLocaleString();
}

枚举的遍历
代码如下:

public class EnumTest {
    public static void main(String[] args){
        for(Week w:Week.values()){
            System.out.println(w);
        }
    }
}

枚举的常用方法

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

int compareTo方法

String name()返回枚举实例的名称

int ordinal() 返回枚举值在枚举中的索引

String toString()返回枚举的实例名称 比name更常用

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

public static valueOf()
代码如下:

public class EnumTest {
    public static void main(String[] args){
        Week day =Week.FRI;
        System.out.println(day);//FRI
        System.out.println(day.name());//FRI
        System.out.println(day.ordinal());//4
        System.out.println(Week.valueOf("SUN").toLocaleString());//星期日
        System.out.println(Week.values().length);//7  获取枚举长度
    }
}

枚举的构造函数
代码如下:

public enum Gender {
    MALE("男"),FEMALE("女");
    private String name;
    private Gender(String name){
        this.name =name;
    }
    public String getName(){
        return this.name;
    }
    public String toString(){
        String name = null;
        switch(this){
        case MALE:
            name="男";
            break;
        case FEMALE:
            name="女";
            break;
        }
        return name;
    }

}

枚举的综合应用示例:交通灯

代码如下:

public enum Lamp {
     /*每个枚举元素各表示一个方向的控制灯*/   
     S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
     /*下面元素表示与上面的元素的相反方向的灯,它们的“相反方向灯”和“下一个灯”应忽略不计!*/
     N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),
     /*由南向东和由西向北等右拐弯的灯不受红绿灯的控制,所以,可以假想它们总是绿灯*/
     S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);

     private Lamp(String opposite,String next,boolean lighted){
         this.opposite = opposite;
         this.next = next;
         this.lighted = lighted;
     }

 
     /*当前灯是否为绿*/   
     private boolean lighted;
     /*与当前灯同时为绿的对应方向*/   
     private String opposite;
     /*当前灯变红时下一个变绿的灯*/   
     private String next;
     public boolean isLighted(){
         return lighted;
     }

     /**
      * 某个灯变绿时,它对应方向的灯也要变绿
      */   
     public void light(){
         this.lighted = true;
         if(opposite != null){
             Lamp.valueOf(opposite).light();
         }
         System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");

     }

     /**
      * 某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
      * @return 下一个要变绿的灯
      */   
     public Lamp blackOut(){
         this.lighted = false;
         if(opposite != null){
             Lamp.valueOf(opposite).blackOut();
         }       

         Lamp nextLamp= null;
         if(next != null){
             nextLamp = Lamp.valueOf(next);
             System.out.println("绿灯从" + name() + "--------切换为" + next);           
             nextLamp.light();
         }
         return nextLamp;
     }
 }

来源:http://www.tulaoshi.com/n/20160219/1593263.html

延伸阅读
Java统计从1970年1月1日起的毫秒的数量表示日期。也就是说,例如,1970年1月2日,是在1月1日后的86,400,000毫秒。同样的,1969年12月31日是在1970年1月1日前86,400,000毫秒。Java的Date类使用long类型纪录这些毫秒值.因为long是有符号整数,所以日期可以在1970年1月1日之前,也可以在这之后。Long类型表示的最大正值和最大负值可以轻松的表...
JAVA数组与容器类主要有三方面的区别:效率、类型和保存基本类型的能力 。在JAVA中,数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性数列,这使得元素访问非常快速。但是为此付出的代价却是数组的大小被固定,并且在其生命周期中不可改变。 由于范型和自动包装机制的出现,容器已经可以与数组几乎一样方便地...
一、Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引...
运行效果: 控制台效果: ================================================== 代码部分 ================================================== /hello_test/src/com/b510/test/StaticTest.java 代码如下: /**   *   */  package com.b510.test;  /**   * 在程序运行时的区别:实例变量属于某个对象的...
String : 字符串类型 一、构造函数 代码如下: String(byte[ ] bytes):通过byte数组构造字符串对象。 String(char[ ] value):通过char数组构造字符串对象。 String(Sting original):构造一个original的副本。即:拷贝一个original。 String(StringBuffer buffer):通过StringBuffer数组构造字符串对象。 例如: 代码如下: by...

经验教程

446

收藏

56
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部