黑马程序员技术交流社区

标题: 枚举 求技术分 [打印本页]

作者: pzfpang449    时间: 2013-1-23 17:46
标题: 枚举 求技术分
本帖最后由 张向辉 于 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();
}
结果为星期一



作者: 李培根    时间: 2013-1-23 19:05
楼主你好,分享学习日记的话,如果仅仅是日记是不会加技术分的,需要有自己的理解,而且总结的很好,对大家很有帮助才会加技术分的。

目前技术分的获得还是以提问和回答的方式获得。
作者: 铿锵科技    时间: 2013-2-1 01:37
怎样才有帮助?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2