java拾遗录(一)

以前学java的时候经常关注一些基本知识,没有涉及到实际应用上,这几天去公司实习。发现一个以前经常听说但是重来没有亲自用过的一个东西:枚举类(Enum)

 

相比如常量来表示某些值,使用枚举类可以很好的体现可读性、安全性等特点。

在java中可以在工程中右键来新建一个自己的Enum类,他继承了java.lang.Enum类,实现Serializable 和 Comparable 接口

构造器是private修饰,该类的所有实例必须在第一行显示的列出来。

在该类中包含values()方法可以返回这个枚举类中包含的所有实例。同时可以用valueof(class,name)来创建一个已有的枚举类实例

枚举类最大的特点是希望他不被外接改变(大概是这种感觉吧)

e.g:enum

 1 public enum Gender {
 2     MALE("男"),FEMALE("女");
 3     private String name;
 4     
 5     Gender(String name){
 6         this.name = name;
 7     }
 8     
 9     public String getName(){
10         return name;
11     }
12 }
public class EnumTest {
    public static void main(String[] args) {
        Gender g = Enum.valueOf(Gender.class, "FEMALE"); //得到相应的enum实例
        System.out.println(g + "  represent :  " + g.getName());
    }
    
}

输出结果:FEMALE  represent :  女

 

和类相似的,枚举类也可以实现接口

1 public interface GenderDesc {
2     public void getInfo();
3 }

gender实现接口并且给出接口中方法的具体实现:

public enum Gender implements GenderDesc{
    MALE("男"),FEMALE("女");
    private String name;
    
    Gender(String name){
        this.name = name;
    }
    
    public String getName(){
        return name;
    }

    @Override
    public void getInfo() {
        System.out.println("interface test !!");
    }
}

EnumTest中实现:

public class EnumTest {
    public static void main(String[] args) {
        Gender g = Enum.valueOf(Gender.class, "FEMALE");
        System.out.println(g + "  represent :  " + g.getName());
        g.getInfo();
        
    }
    
}

结果:

FEMALE represent : 女
interface test !!

在实现接口的时候也可以针对不同的对象实现不同的方法:

public enum Gender implements GenderDesc{
    MALE("男"){
        public void getInfo(){
            System.out.println(" it's a man !");
        }
    },FEMALE("女"){
        public void getInfo(){
            System.out.println("it's a woman");
        }
    };
    private String name;
    
    Gender(String name){
        this.name = name;
    }
    
    public String getName(){
        return name;
    }

}
 1 public class EnumTest {
 2     public static void main(String[] args) {
 3         Gender g = Enum.valueOf(Gender.class, "FEMALE");
 4         System.out.println(g + "  represent :  " + g.getName());
 5         g.getInfo();
 6         
 7         Gender g2 = Enum.valueOf(Gender.class, "MALE");
 8         System.out.println(g2 + "  represent :  " + g2.getName());
 9         g2.getInfo();
10         
11     }
12     
13 }

结果:

FEMALE represent : 女

it's a woman

MALE represent : 男
it's a man !

在上面的程序中,当创建MALE,FEMALE的枚举类时并不是直接创建Gender类,而是创建他的匿名子类,从编译产生的class文件可以看出来。

 

posted @ 2013-05-25 20:34  拙急鸟  阅读(148)  评论(0编辑  收藏  举报