Java碎碎念之枚举类(Enum)

枚举类的概念:

  • 类的对象只有有限个、确定的。如:星期、性别、季节。
  • 当需要定义一组常量的时候,强烈建议使用枚举类.

枚举类的实现:

  • jdk1.5之前需要自定义枚举类,jdk1.5之后新增的enum关键字用于定义枚举类.

  • 枚举只有一个对象,则可以作为一种单例模式的实现方式.

  • 枚举类的属性:
    a)枚举类对象的属性不应允许被改动,所以应该使用private final修饰.(final属性应被初始化,默认值不行.)
    b)枚举类的使用private修饰的属性应该在构造器中为其赋值.
    c)若枚举类显示的定义了带参数的构造器,则在列出枚举时也必须对应的传入参数.

  • 自定义枚举类的步骤
    1)声明枚举类对象的属性(private final)
    2)私有化类的构造器.并给属性初始化.
    3)提供静态的当前枚举类的多个对象(供外部访问.)
    4)其他诉求1:
    获取枚举类对象的属性:get方法
    其他诉求2:
    提供tostring();

public class DiyEnum {
    public static void main(String[] args) {
        Season sprint = Season.SPRINT;
        System.out.println(sprint);
    }
}
class Season{
    private  final String name;
    private  final String dest;
    private Season(String name,String dest){
        this.name=name;
        this.dest=dest;
    }
    public static final Season SPRINT=new Season("春天","万物复苏");

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", dest='" + dest + '\'' +
                '}';
    }
}
  • 使用enum定义枚举类
    1)将原来class换成enum,则此类默认继承于java.lang.enum;
    2)直接定义对象,中间用逗号隔开,定义方式为:Spring(“春天”,“春暖花开”);
    3)属性依然是private final;构造器依然是private;
    4)父类enum中重写过tostring方法,返回的是此对象的名字,如若需要可以重写tostring方法.
public class DiyEnum1 {
    public static void main(String[] args) {
        Season1 autumn = Season1.Autumn;
        Season1[] values = Season1.values();
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);
            values[i].method();
        }
        //   System.out.println(autumn);
    }
}

enum Season1 implements A {
    Spring("春天", "春暖花开") {
        @Override
        public void method() {
            System.out.println("春天在哪里啊!");
        }
    },
    Summer("夏天", "夏日炎炎") {
        @Override
        public void method() {
            System.out.println("宁静的夏天");
        }
    },
    Autumn("秋天", "硕果累累") {
        @Override
        public void method() {
            System.out.println("秋天不回来");
        }
    },
    Winter("冬天", "冰天雪地") {
        @Override
        public void method() {
            System.out.println("大约在冬季");
        }
    };
    private final String name;
    private final String dest;

    private Season1(String name, String dest) {
        this.dest = dest;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Season1{" +
                "name='" + name + '\'' +
                ", dest='" + dest + '\'' +
                '}';
    }
}
  • 常用的方法
    1)values():遍历枚举类所有的常量.
    2)valueof(String objname),返回枚举类中对象名是objname的对象,如果枚举类中没有此对象,则抛出异常:IllegalArgumentException
    3)tostring方法.

  • 枚举中关于接口的使用(见上面的代码块)
    1)直接implements 接口名,在枚举类中书写方法体,但是每个对象都只能调用同一个重写后的方法.
    2)继承接口后,可直接在对象后面用大括号重写该方法,每个对象拥有自己不同的该方法体.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我只会javase

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值