java学习之枚举
2015-03-31 23:20
267 查看
前段时间在java班上,老师用到了枚举,当时讲的不是很详细,所以一直是觉得懵懵懂懂的,不太清楚,在回来有参考网上别人的博客做过一次练习,当时做的很仔细,但是这才没过多久就又快忘记了,所以还是记录下来以前学习的吧。有些代码是在网上借鉴的,忘记了出处,请见谅!还有的是Java核心编程 卷1上的。 微笑。 1. 这个代码是我第一次接触java的枚举,很简单的一段代码。
Enum的定义:
public enum Myenum { RED,GREEN,BLACK,BLUE/*这些枚举值都是public static final的,也就是我们经常所定义的常量方式,因此枚举类中的枚举值最好全部大写。 */ //public static final enum Myenum Red;... }
主函数如下
public class TestMyenum { public static void main(String[] args){ Myenum [] my = Myenum.values();/*每个枚举类型都有一个静态的values方法,它将返回一个包含全部枚举值的数组*/ for (int i = 0; i < my.length; i++) { System.out.println(my[i].name()); } //遍历数组,输出所有的枚举值 Myenum my1 = Myenum.RED; /*定义一个Myenum类型的枚举并赋值RED,枚举类就是class,而且是一个不可以被继承的final类。其枚举值(RED,BLUE...)都是Myenum类型的类静态常量, 我们可以通过上面的方式来得到Myenum枚举类的一个实例: */ switch(my1){//用switch判断输出对应的颜色 case BLUE: System.out.println("蓝色");break; case GREEN: System.out.println("绿色");break; case RED: System.out.println("红色");break; case BLACK: System.out.println("黑色");break; default: System.out.println("不存在"); } }
执行的结果如下:
2.枚举是类,所以再枚举类型中有构造器,方法和数据域。只是有些不同,枚举中的构造方法都是私有的,而且只是在构造枚举值的时候才会被调用。所有枚举类都继承了Enum的方法。
方法:(1) ordinal()方法: 返回枚举值在枚举类种的顺序。这个顺序根据枚举值声明的顺序而定。
(2) compareTo()方法: Enum实现了java.lang.Comparable接口,因此可以比较象与指定对象的顺序。Enum中的compareTo返回的是两个枚举值的顺序之差,如果调方法的枚举值在前面就会返回负数,相反就会返回整数,数值就是相距的绝对值。当然,前提是两个枚举值必须属于同一个枚举类,否则会抛出ClassCastException()异常。
(3) values()方法: 静态方法,返回一个包含全部枚举值的数组。
(4) toString()方法: 返回枚举常量的名称。
(5) valueOf()方法: 这个方法和toString方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。 Size.valueOf(“LARGE”); //返回结果: Size.LARGE Size s = Enum.valueOf(Size.class,”LARGE”); //将s设置为LARGE
package mhc.learn.Enum; public enum Size{ EXTRA_SMALL("XS"),SMALL("S"),MEDIUN("M"),LARGE("L"),EXTRA_LARGE("XL"); //these are constructor(构造器),默认是无参数的构造器,有参数的 //需要自己定义,且必须是private访问权限的,防止被外部修改。 private String abbreviation; private Size(String abbreviation){//abbreviation 缩写,缩写词 this.abbreviation = abbreviation; } //向外部提供接口,得到缩写 public String getAbbreviation(){ return abbreviation; } }
package mhc.learn.Enum; public class TestEnum { public static void main(String[] args) { Size s = Size.LARGE; System.out.println(s.getAbbreviation());//调用了Size.LARGE.toString() /*test valueof(toString的逆方法)*/ Size s1 = Enum.valueOf(Size.class, "EXTRA_SMALL"); //当EXTRA_SMALL这个值不在Size中的话,就会抛出异常 System.out.println(s1); /*test ordinal方法*/ System.out.println(s1+"的下标是"+s1.ordinal()); System.out.println(Size.EXTRA_LARGE+"的下标是"+Size.EXTRA_LARGE.ordinal()); /*test values方法*/ Size[] values = Size.values(); for (Size size : values) { System.out.print(size + " "); } } }
输出的结果是:
在认真写了博客之后,感觉是清楚了很多,在写的过程中查阅了不少的资料,效果还是不错的。所以当你对某一块的知识不是很清楚的时候,建议写下来,就像做笔记一样,忘记了就再看一看,很有帮助的。
相关文章推荐
- Java学习第七课...枚举.自动装箱.静态导入...-asp.net关注
- J2SE学习笔记3 — Java基本语法(9)数组和枚举
- java Enum枚举学习
- 黑马程序员-java学习笔记-枚举
- java枚举类型-学习初
- Java编程思想学习笔记——枚举、注解
- 6 Java学习之 枚举
- java学习笔记之 --------枚举(enum)
- 《编写高质量代码改善Java程序的151个建议》学习笔记 第6章 枚举和注解
- C#与Java对比学习:数据类型、集合类、栈与队列、迭达、可变参数、枚举
- java基础学习:枚举 一
- 黑马程序员--java学习之享元与枚举
- 黑马程序员_java枚举的学习心得
- Java 枚举学习
- java 枚举学习--从小程序中学习
- java学习之枚举
- 黑马程序员_java学习日记_Java高新技术_枚举
- Java学习枚举
- java学习笔记10--枚举
- C#与Java对比学习:数据类型、集合类、栈与队列、迭达、可变参数、枚举