- 类的对象只有有限个,确定的。
- 如果枚举类中只有一个对象,则可以作为单例模式的实现方式。
JDK1.5之前需要自定义枚举类
public class Test {
public static void main(String[] args) {
Book java = Book.JAVA;
System.out.println(java);
}
static class Book{
//1声明Book类的属性:private final修饰
private final String name;
private final String author;
//2私有化构造器
private Book(String name,String author){
this.author = author;
this.name = name;
}
//3提供当前枚举类的多个对象
public static final Book JAVA = new Book("JAVA","张三");
public static final Book PHP = new Book("PHP","李四");
public String getName() {
return name;
}
public String getAuthor() {
return author;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + ''' +
", author='" + author + ''' +
'}';
}
}
}
使用enum关键字定义枚举类
JDK1.5新增enum关键字用于定义枚举类
public class test {
public static void main(String[] args) {
Book java = Book.JAVA;
System.out.println(java);
}
//使用enum关键字定义枚举类
enum Book{
//1.提供当前枚举类多个对象
JAVA("JAVA","张三"),
PHP("PHP","李四");
//2.声明Book对象属性,使用private final修饰
private final String name;
private final String author;
//3.私有化构造器,给对象赋值
private Book(String name,String author){
this.name = name;
this.author = author;
}
public String getName() {
return name;
}
public String getAuthor() {
return author;
}
}
}
枚举类的属性
- 枚举类对象的属性不允许被改动,所以应该使用private final修饰
- 枚举类使用private final修饰的属性应该在构造器中为其赋值
- 若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数
- values():返回枚举类型的对象数组,方便遍历所有枚举值
- valueOf(String str):返回枚举类中对象名是str的对象
- toString():返回当前枚举类对象的常量名称
public class test {
public static void main(String[] args) {
Book java = Book.JAVA;
System.out.println(java.toString());
System.out.println(Book.valueOf("PHP"));
Book[] values = Book.values();
for (Book book:values) {
System.out.println(book);
}
}
enum Book{
JAVA("JAVA","张三"),
PHP("PHP","李四");
private final String name;
private final String author;
private Book(String name,String author){
this.name = name;
this.author = author;
}
public String getName() {
return name;
}
public String getAuthor() {
return author;
}
}
}
使用enum关键字定义的枚举类实现接口
- 同普通类实现接口方法
- 枚举类对象各自实现接口方法
public class test {
public static void main(String[] args) {
Book java = Book.JAVA;
java.out();
java.show();
}
//接口 Info
interface Info{
void show();
void out();
}
enum Book implements Info{
//1.提供当前枚举类多个对象,使用public static final修饰
JAVA("JAVA","张三"){
@Override
public void show() {
System.out.println("java实现show");
}
},
PHP("PHP","李四"){
@Override
public void show() {
System.out.println("php实现show");
}
};
private final String name;
private final String author;
private Book(String name,String author){
this.name = name;
this.author = author;
}
public String getName() {
return name;
}
public String getAuthor() {
return author;
}
@Override
public void out() {
System.out.println("实现out方法");
}
}
}



