零基础学习之Java列举类
- 概述
- JDK1.5之前
- 创建列举类
- 代码示例
- JDK1.5之后
- 创建列举类
- 代码示例
- 列举类继承父类
- 基本介绍
- 代码示例
- 列举类实作界面
- 基本介绍
- 代码示例
- 列举类实作单例模式
- 基本介绍
- 代码示例
概述
列举类是Java类中一个特殊的类,它是用来专门解决某些型别的物件是有限的几个的场景,这样的场景在我们的生活中非常常见,比如:人的性别(男,女),一年的月份(1月…12月),一年的季节(春夏秋冬),一周内天的表示法(周一…周日),彩虹的颜色(红…紫)等等,所以列举类在实际生活中尤其的有用,
注:列举类也不能被其他类继承
代码示例
测验类
package com.atguigu.demo;
import com.atguigu.bean.Gender2;
public class Demo3 {
public static void main(String[] args) {
Gender2 gender2 = Gender2.BOY;
//获取物件的名称
System.out.println(gender2.name());
//回传也是物件的名称,自定义的列举类可以再次重写
System.out.println(gender2.toString());
//回传当前物件的位置(角标)
System.out.println(gender2.ordinal());
//回传该列举类所有的常量物件
Gender2[] gender21 =Gender2.values();
for (int i = 0; i < gender21.length; i++) {
System.out.println(gender21[i]);
}
//根据字符串的名称,回传常量物件
String str = "BOY";
Gender2 gender22 = Gender2.valueOf(str);
System.out.println(gender22);
}
}
列举类实作界面
基本介绍
列举类虽然不能继承其他的类,但是列举类也是类,可以实作界面,可以同时实作多个界面,可以统一实作,也可以用匿名内部类的形式,单独给某个常量物件实作抽象方法,
修饰符 类名 implements 界面名{
}
注意:
- 列举类提供的物件个数是确定的,并且在类加载的时候物件已经产生了,所以,抽象方法的实作,可以将范围缩小到某个物件
常量物件 【(实参串列)】{
对父级做扩展
}
- 当列举类中所有的物件都单独对抽象方法做了实作,那么公有的实作就可以洗掉
代码示例
public enum Gender3 implements Eat {
BOY("男孩"){
@Override
public void eat() {
System.out.println("男孩吃的多");
}
},
GIRL("女孩"){
@Override
public void eat() {
System.out.println("女孩吃的多");
}
};
}
interface Eat{
void eat();
}
列举类实作单例模式
基本介绍
如果列举类的物件只有一个,那么可以作为单例模式的实作,这是因为单例模式约束一个类只能实体化一个物件,目前来说在Java中,为了强制只实体化一个物件,最好的方法是使用一个列举量,
在 Java 中使用列举作为单例有以下几个原因:
- 自由序列化,
- 保证一个实体(即使通过反射也不能实体化超过一个列举,)
- 执行绪安全
代码示例
public class Singleton {
public static void main(String[] args) {
Singleton singleton1 = Singleton.INSTANCE;
Singleton singleton2 = Singleton.INSTANCE;
System.out.println(singleton1 == singleton2 );
System.out.println("singleton1 ,hashCode= " + singleton1.hashCode());
System.out.println("singleton2 ,hashCode = " + singleton2.hashCode());
singleton1.sayOK();
}
}
enum Singleton{
INSTANCE;
public void sayOK() {
System.out.println("ok~");
}
}
0 评论