A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pzfpang449 中级黑马   /  2013-1-23 17:46  /  1329 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-23 19:35 编辑

5,枚举
一些程序在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,jdk5以前采用的自定义类来解决,jdk5以后可以直接采用枚举解决
package com.itcast.enumeration;

import org.junit.Test;

public class meiju {
//限定只可以传A B C D E
        @Test
        public void test(){
                print(Grade.B);
        }
        public void print(Grade g){//限定只可以传A B C D E
                String value= g.getValue();
                System.out.println(value);
        }
}
//传统方法,自定义
/*class Grade{
        private Grade(){};
        public static final Grade A=new Grade();
        public static final Grade B=new Grade();
        public static final Grade C=new Grade();
        public static final Grade D=new Grade();
}*/
//如何定义枚举的构造函数、方法个字段,去封装更多的信息
enum Grade{
        A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-50");
        private String value;
        private Grade(String value){
                this.value=value;
        }
        public String getValue(){
                return this.value;
        }
}

输出结果为89-80

//带抽象方法的枚举
package com.itcast.enumeration;

import org.junit.Test;

public class CopyOfmeiju {
//限定只可以传A B C D E
        @Test
        public void test(){
                print(Grade1.B);
        }
        @Test
        public void test2(){
                //获取枚举的名称
                System.out.println(Grade.C.name());
                //获取枚举的位置
                System.out.println(Grade.C.ordinal());
                String str="B";
                Grade1 g=Grade1.valueOf(str);
                System.out.println(g);
                //遍历枚举的所有值
                Grade gs[]=  Grade.values();
                for(Grade g2:gs){
                        System.out.println(g2);
                }
        }

        public void print(Grade1 g){//限定只可以传A B C D E
                String value= g.localValue();
                System.out.println(value);
        }
}
//传统方法,自定义
/*class Grade{
        private Grade(){};
        public static final Grade A=new Grade();
        public static final Grade B=new Grade();
        public static final Grade C=new Grade();
        public static final Grade D=new Grade();
}*/
//如何定义枚举的构造函数、方法个字段,去封装更多的信息
enum Grade1{
        A("100-90"){
                public String localValue(){
                        return "优秀";
                }
        }
        ,B("89-80"){
                public String localValue(){
                        return "良好";
                }
        }
        ,C("79-70"){
                public String localValue(){
                        return "一般";
                }
        }
        ,D("69-60"){
                public String localValue(){
                        return "及格";
                }
        }
        ,E("59-50"){
                public String localValue(){
                        return "不及格";
                }
        };
        private String value;
        private Grade1(String value){
                this.value=value;
        }
        public String getValue(){
                return this.value;
        }
        public abstract String localValue();
}

输出结果为  良好
枚举具有的特点:
1,枚举是一种特殊形式的java类
2,枚举中声明的每一个枚举值代表枚举类的一个实例对象
3,枚举类的构造函数必须为私有的
4,枚举也可以实现接口、或继承抽象类
5,JDK5中扩展了switch语句,它除了可以接受int,byte,char,short外,还可以接受一个枚举类型
6,若枚举类只有一个枚举值,则可以当做单态设计模式使用

枚举例子,中文星期*
package com.itcast.enumeration;

import org.junit.Test;

public class WeekDAY1 {
        
        public void prin(WeekDay day){
               
                String chiDay=day.chinaWeek();
                System.out.println(chiDay);
        }
        @Test
        public void Test(){
                prin(WeekDay.MON);
        }
}
enum WeekDay{
        MON("1"){
                public String chinaWeek(){
                        return "星期一";
                }
        }
        ,TUE("2"){
                public String chinaWeek(){
                        return "星期二";
                }
        }
        ,WED("3"){
                public String chinaWeek(){
                        return "星期三";
                }
        }
        ,THU("4"){
                public String chinaWeek(){
                        return "星期四";
                }
        }
        ,FRI("5"){
                public String chinaWeek(){
                        return "星期五";
                }
        }
        ,SAT("6"){
                public String chinaWeek(){
                        return "星期六";
                }
        }
        ,SUN("7"){
                public String chinaWeek(){
                        return "星期七";
                }
        };
        
        private String day;
        private WeekDay(String day)
        {
                this.day=day;
        }
        public String getDay(String day){
                return this.day;
        }
        public  abstract String chinaWeek();
}
结果为星期一


评分

参与人数 1黑马币 +5 收起 理由
李培根 + 5 感谢分享

查看全部评分

2 个回复

倒序浏览
楼主你好,分享学习日记的话,如果仅仅是日记是不会加技术分的,需要有自己的理解,而且总结的很好,对大家很有帮助才会加技术分的。

目前技术分的获得还是以提问和回答的方式获得。
回复 使用道具 举报
怎样才有帮助?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马