java 枚举元素_Java枚举入门学习

接下来学习枚举的概念,以及基本使用。

JDK1.5 特性-枚举

在开发中有一类数据集比较特殊,它们数值稳定并且元素个数有限,如一个星期的7天,一年的四个季节,一年的12个月等,这种有固定的内容的情况可以使用枚举,枚举的个数是固定的,不容许随意改动,它也是一个类,是JDK1.5引入的一个新的类型。

如下代码1和代码2是参考了博客的枚举简单使用,枚举中的值建议全部大写,语法格式如下:

enum 枚举名{

枚举值1,枚举值2,... 枚举值n;//结尾最好加上分号,如果只有一行可以不加

}

枚举简单使用

package com.boe.jdk;

/**

* 测试枚举定义和简单使用

* @author clyang

*

*/

public class TestEnum1 {

public static void main(String[] args) {

//枚举可以用在switch-case,switch中条件不仅仅可以是char,int,short等

Singal s=Singal.ONE;

int n=0;

System.out.println(n);

switch(s){

case ONE:

n=1;

break;

case TWO:

n=2;

break;

case THREE:

n=3;

break;

case FOUR:

n=4;

break;

}

//输出结果

System.out.println(n);

System.out.println(s.FOUR);//直接得到FOUR

}

}

//定义枚举

enum Singal{

ONE,TWO,THREE,FOUR;//枚举建议大写

}

测试结果

8b93995ec6dd28380b8226eb645fb870.png

枚举中可以自定义方法,并且可以实现接口

package com.boe.jdk;

/**

* 向枚举中添加方法,并且实现接口

* @author clyang

*

*/

public class TestEnum2 {

public static void main(String[] args) {

Student s=Student.FOOTBALLPLAYER;

//枚举中自定义方法

System.out.println(s.getName());

System.out.println(s.getId());

System.out.println(Student.findIdByName("张三"));

System.out.println(Student.findNameById(2));

//枚举中接口方法

s.print();

}

}

//枚举中添加方法,根据学号找学生名字,根据学生名字找学号

enum Student implements Iprint{

//定义三个学生

Boss("张三",1),AUTHOR("李四",2),FOOTBALLPLAYER("王五",3);

private String name;

private int id;

//有参数构造方法

private Student(String name, int id) {

this.name = name;

this.id = id;

}

//根据名字寻找学号

public static int findIdByName(String name){

//values()方法得到所有的枚举元素

for(Student s:Student.values()){

if(s.getName()==name){

return s.getId();

}

}

return -1;//-1代表没找到

}

//根据学号寻找名字

public static String findNameById(int id){

//values()方法得到所有的枚举元素

for(Student s:Student.values()){

if(s.getId()==id){

return s.getName();

}

}

return "找不到";

}

//get set方法

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

//实现接口方法

@Override

public void print() {

System.out.println("enum还可以实现接口");

}

}

//定义接口

interface Iprint{

public abstract void print();

}

测试结果

64dd2163e097a7e3a63dd11a0acb7c24.png

枚举中可以实现抽象方法,使用内部类实现抽象方法

package com.boe.jdk;

public class TestEnumDemo1 {

public static void main(String[] args) {

//在JDK1.5之后,switch-case允许使用枚举,也可以使用字符串,但是使用枚举可以将错误在编译期体现出来

EnumSeason s=EnumSeason.SPRING;

switch(s){

case SPRING:

s.play();

break;

case SUMMER:

s.play();

break;

case AUTUMN:

s.play();

break;

case WINTER:

s.play();

break;

}

}

}

//JDK1.5后的枚举,建议大写

enum EnumSeason{

//枚举必须放在有效代码的第一行

//如果有抽象方法,内部类实现抽象方法

SPRING {

@Override

public void play() {

System.out.println("这是春天");

}

},SUMMER {

@Override

public void play() {

System.out.println("这是夏天");

}

},AUTUMN {

@Override

public void play() {

System.out.println("这是秋天");

}

},WINTER {

@Override

public void play() {

System.out.println("这是冬天");

}

};//默认底层还是按照JDK1.5之前的写法

//可以添加属性

private int month;

//如有后面添加有参构造方法,需添加默认构造方法

private EnumSeason(){

}

//添加一个有参构造方法测试

private EnumSeason(int month){

this.month=month;

}

//可以定义一个抽象方法

public abstract void play();

}

测试结果

b7a69029076422bb422cf7caedbc1c98.png

JDK1.5之前的写法

package com.boe.jdk;

/**

* 测试枚举

* @author clyang

*

*/

public class TestEnumDemo {

Season s=Season.Spring;

}

//定义一个枚举类,代表四季

class Season{

//JDK1.5之前的写法

/**

* 需要明白public,final,static写的原因

* static:为了让外部类能直接调用

* final:为了不让外部可以修改

* public:为了公共都能访问

*/

//定义四季

public final static Season Spring=new Season();

public final static Season Summer=new Season();

public final static Season Autum=new Season();

public final static Season Winter=new Season();

}

总结

枚举是JDK1.5后引入的新特性,可以定义固定数量固定内容不能改动的量,JDK1.5后定义枚举类型很方便,直接在里面写参数就可以,并且可以在里面添加属性、添加抽象方法,添加自定义方法,并且可以实现接口。

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值