java打印枚举类型null,Java 之枚举类

在某些情况下,一个类的对象是有限而且是固定的,比如季节类,它只有4个对象。这种实例有限而且固定的类,在Java里被称为枚举类。

在早期,可能会直接使用简单的静态常量来表示枚举类,例如:public static final int SEASON_SPRING = 1;

public static final int SEASON_SUMMER = 2;

public static final int SEASON_FAIL = 3;

public static final int SEASON_WINTER = 4;

这种定义简单明了,但会存在一些问题:类型不安全:因为会把一个季节当成一个int整数使用,例如进行加法运算。

没有命名空间:比如SEASON前缀,否则会与其他混淆。

打印输出的意义不明确:比如输出SEASON_SPRING,实际上输出的是1。

但枚举又确实有存在的意义,因此早期也可采用通过定义类的方式来实现。通过private将构造器隐藏起来。

把这个类的所有可能实例都使用public static final修饰的类变量来保存。

如果有必要,可以提供一些静态方法,允许其他程序根据参数来获取与之匹配的实例。

使用枚举类可以使程序更加健壮,避免创建对象的随意性。

但通过定义类来实现枚举的代码量比较大,实现起来也比较麻烦,Java从JDK1.5后就增加了对枚举类的支持。

入门:

Java5新增了一个enum关键字(它与class、interface关键字的地位相同),用以定义枚举类,枚举类是一种特殊的类,它一样可以有自已的成员变量、方法,可以实现一个或者多个接口,也可以定义自已的构造器。一个Java源文件中最多只能定义一个public访问权限的枚举类,且名称也要相同。

但枚举类终究不是普通类,它与普通类有如下区别:枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是默认继承Object类,因此枚举类不能显示继承其他父类。其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable接口。

使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类。

枚举类的构造器只能使用private访问控制符,如果省略了构造器的访问控制符,则默认使用private修饰,如果强制指定访问控制符,则只能指定private修饰。

枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远都不能产生实例。列出这些实例,系统会自动添加public static final修饰。

枚举类默认提供了一个values()方法,该方法可以很方便地遍历所有的枚举值。

枚举类的实例只能是枚举值,而不是随意地通过new来创建枚举类对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值