I学霸官方免费教程二十五:Java基础教程之枚举 enum

来源:互联网 发布:如何修改4g网络设置 编辑:程序博客网 时间:2024/05/18 05:25

枚举

枚举简单的说就是将需要的常量值一个一个的列举出来,并封装成一个整体。
语法格式:[public] enum 枚举名{ //值列表 }
声明格式:枚举名 变量名;
赋值格式:变量名 = 枚举名.值
其中的列举的每个值要符合标识符命名规则,不可随意编写

实例:package enumdemo.simple;/** * 创建枚举类型的Week 注意:这里创建的是枚举,即数据类型是enum,而不是类 * @author 学霸联盟 - 赵灿 */public enum Week {// 列举出周的值,中间用英文格式的逗号隔开// 枚举中没有类型之分,直接列举需要的值即可星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日}package _enum.simple;/** * 测试枚举的使用 * @author 学霸联盟 - 赵灿 */public class Test {public static void main(String[] args) {// 在switch中的应用;这样week代表的就是星期三Week week = Week.星期三;// 这里传入了枚举类型的变量weekswitch (week) {// 这里的case值直接使用枚举中存在的值,不能使用其他值case 星期一:System.out.println("周一");break; case 星期二:System.out.println("周二");break;case 星期三:System.out.println("周三");break;case 星期四:System.out.println("周四");break;case 星期五:System.out.println("周五");break;case 星期六:System.out.println("周六");break;case 星期日:System.out.println("周日");break;}}}输出结果:周三

以下内容初学者可选读
public  enum  Week{//这些值会被转换成Week类型的属性(变量)名星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日}//下面代码是枚举Week转换成类以后的代码//枚举中列举的每个值都要符合标识符命名规则;这是因为枚举属于引用类型,在底层处理时,枚举Week会被转换成public  final  class  Week  extends java.lang.Enum<Week>{public  static  final  Week  星期一; public  static  final  Week  星期二; public  static  final  Week  星期三; public  static  final  Week  星期四; public  static  final  Week  星期五; public  static  final  Week  星期六; public  static  final  Week  星期日;public  static  final  Week[]  $VALUES;static{星期一 = new  Week();星期二 = new  Week();星期三 = new  Week();星期四 = new  Week();星期五 = new  Week();星期六 = new  Week();星期七 = new  Week();$VALUES = {星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期七}}public  static  Week[]  values(){return  (Week[])($VALUES. clone());}public static Week valueOf(String  name){return  (Week)(super. valueOf(Week.class, name));}}

可以看到转换后的Week类中,所有成员都是静态的,所以提现出来的是值类型的特性
注意:虽然枚举在底层会被转换成类;但在使用时,不需要使用new去创建对象。需要传递时也都是值传递的特性

另外,枚举中可以有属性和方法,包括构造方法;
例1:public  enum  Week{//MON会被转换成一个Week类型的属性,在创建Week对象是调用Week的无参构造MON( )}public  enum  Week{//由于声明了带一个String类型参数的构造方法,所以此处这样写时也要带参数//注意:属性、方法、构造方法的声明都必须放在枚举值之后MON("星期一")//在枚举Week中声明一个带参数的构造方法//注意:枚举中声明构造方法只能使用private修饰或者不写,不能使用public和protectedprivate  Week(String  value){//枚举中也可以使用this关键字this.value = value;}//属性和方法可以使用所有的访问修饰符修饰private  String  value;//声明一个获取value的方法public  String  getValue(){//没有局部变量和属性value冲突,关键字this可以省略return  value;}}public  class  Test{public static void main(String[] args) {//输出MON的值        System.out.println(Week.MON.getValue());    }}输出结果:星期一

例2:/** * 枚举Week * @author 学霸联盟 - 赵灿 */enum Week {/* * 枚举值 * 因为该枚举中声明了带一个int类型参数的构造方法  * 所以枚举值后需要加小括号()中带一个int类型的值 * 这个值会传递给构造方法中的形参value */    MON(1), TUE(2), WED(3), THU(4), FRI(5),     //SAT(6){}这样写作用类似匿名内部类    SAT(6) {    // 重写getValue方法        @Override        public int getValue() {            return 60;        }    },    SUN(7) {        @Override        public int getValue() {            return 70;        }    };        // 枚举的属性    private int value;    // 该枚举的构造方法    Week(int value) {        this.value = value;    }    // 该枚举的普通方法    public int getValue() {        return value;    }}/** * EnumTest类:用于测试枚举的使用 * @author 学霸联盟 - 赵灿 */public class EnumTest {    public static void main(String[] args) {        System.out.println("EnumTest.FRI 的 value = " + Week.FRI.getValue());        System.out.println("EnumTest.SAT 的 value = " + Week.SAT.getValue());    }}运行结果:EnumTest.FRI 的 value = 5EnumTest.SAT 的 value = 60

0 0
原创粉丝点击