枚举
本质就是一个类/单例,里面有一组限定的对象。回忆单例(1、构造器私有;2、类内部创建一个对象;3、添加public static修饰符暴露该对象)。
jdk1.5后,通过关键字enum创建枚举类。枚举类默认提供私有构造方法,属性默认添加private final static修饰,也就是常量。
常见方法
1.toString(): 返回的是常量名(对象名),使用enum定义的类,可以继续重写该方法!
2.name():返回的是常量名(对象名) 【很少使用】
3.ordinal():返回常量的次序号,默认从0开始。
4.values():返回该枚举类的所有的常量对象,返回类型:当前枚举的数组类型,一个静态方法。
5.valueOf(String str):将字符串转换成当前的枚举类的对象,要求:该字符串必须为有效的枚举常量形式!否则报异常!
案例
package com.sire.source.base15.enumu;
/*枚举类*/
public class Test1 {
public static void main(String[] args){
/* Month a = Month.valueOf("c");// 获取枚举中的属性,如果没有回报错
// Month a = Month.a;
System.out.println(a);
// 循环打印所有属性
for(Month m: Month.values()){
System.out.println(m);
}
System.out.println("属性名称:"+a.name());
System.out.println("属性序号:"+a.ordinal());
System.out.println(Month.b);*/
for(Stu s:Stu.values()){
System.out.println("编号:"+s.ordinal()+"\t"+s);
}
}
}
enum Stu{
A("ha",23),B("xixi",36),C(),D(199);//调用构造
private String name;
private int age;
Stu(String name, int age) {
this.name = name;
this.age = age;
}
Stu(int age) {
this.age = age;
}
Stu(){}
@Override
public String toString() {
return "Stu{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
/*枚举类*/
enum Month{
a,b,c,d;// 默认加public static final修饰。常量
Month() {// 构造方法默认修饰符为private
}
}
效果:

枚举实现接口
规则:
1、枚举类可实现多个接口,但要求必须实现里面所有的抽象方法!
语法:
enum A implements 接口1,接口2{
//抽象方法的实现
}
2、如果枚举类的常量可以继续重写抽象方法,语法:
enum A implements 接口1,接口2{
常量名(参数【参数可以没有】){
//抽象方法的实现或重写
}
//抽象方法的实现
}
3、枚举类不可以显式的通过extends继承其他类,因为已经默认继承了Enum
Idea按Ctrl+H:

案例
package com.sire.source.base15.enumu;
/*枚举测试2:枚举实现接口*/
public class Test2 {
public static void main(String[] args) {
for(User u:User.values()){
System.out.println(u.ordinal()+":"+u);
}
System.out.println("重写方法:");
User.A.show();
User.C.show();
}
}
enum User implements aa {
A(),B(230),C("sire",100){
@Override
public void show() {
System.out.println("嘿嘿");
}
};
private String name;
int age;
User() {}
User(int age) {
this.age = age;
}
User(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public void show() {
System.out.println("哈哈哈");
}
}
interface aa{
void show();
}
效果

Last updated
Was this helpful?