序言:关键字Enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用。<br />1**.enum的values()方法:**<br />** ** 调用枚举的values()方法可以遍历注解中的实例。values方法返回一个枚举实例的数组,而且该数组中的元素次序保持在你的枚举类中声明的顺序。
package com.package19;
enum Shrubbery{
GROUND,CRAWLING,HANGING;
}
public class EnumClass {
public static void main(String[] args) {
for (Shrubbery value : Shrubbery.values()) {
System.out.println(value+" "+value.ordinal());
System.out.println(value==Shrubbery.CRAWLING);
System.out.println(value.equals(Shrubbery.CRAWLING));
System.out.println(value.name());
System.out.println(value.getDeclaringClass());
System.out.println("============================");
}
}
}
ordinal()方法返回一个int值,该值时每个enum是在声明的顺序。name()方法返回enum实例声明时的名字,通过调用getDeclaringClass(),我也就可以知道该实例所属的enum类。
注意:
1.我们创建的一个enum类都会继承java.long.Enum。
Enum部分源代码
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable {
public final boolean equals(Object other) {
return this==other;
}
public final int hashCode() {
return super.hashCode();
}
public final int compareTo(E o) {
Enum<?> other = (Enum<?>)o;
Enum<E> self = this;
if (self.getClass() != other.getClass() && // optimization
self.getDeclaringClass() != other.getDeclaringClass())
throw new ClassCastException();
return self.ordinal - other.ordinal;
}
}
并且这个类还实现了Comparable接口和Serializeable接口。所以没一个enum类都具有CompareTo()方法和equals()、hashCode()方法。<br />**2.enum类之间不可以继承**
enum Shrubbery{
GROUND,CRAWLING,HANGING;
}
public enum Spicinerss extends Shrubbery {//不能继承
NOT,MILD,MEDIUM,HOT,FLAMING;
}
2.静态导入用于enum
静态导入:在导入包的路上加入static 关键字。所以在使用该类的static成员时可不带类名
import static com.package19.Spicinerss.*;//静态导入
public class Burrito {
Spicinerss spicinerss;
Burrito(Spicinerss spicinerss) {
this.spicinerss = spicinerss;
}
@Override
public String toString() {
return "Burrito is" + spicinerss;
}
public static void main(String[] args) {
System.out.println(new Burrito(MEDIUM));
}
}