java-枚举类Enum

常见面试题

  1. 枚举允许继承类吗
  2. 枚举允许实现接口吗
  3. 枚举可以用等号比较吗
  4. 其他的类可以继承枚举吗
  5. 枚举可以实现单例模式吗
  6. 当使用CompareTo()比较枚举时,比较的是什么
  7. 当使用equals()比较枚举的时候,比较的是什么
    答案
  8. 枚举不能继承任何类,因为系统默认继承Enum,加上单继承模式,就不能继承任何类。
  9. 枚举允许实现接口,因为枚举本身就是一个类,类可以实现多个接口
  10. 枚举可以使用等号比较。每个枚举里面的实例都是一个类对象(静态常量,用类名.调用) 。类对象是单例。
  11. 枚举是final修饰的类,无法被继承。
  12. 枚举是实现单例模式的例子,它是实现单例模式的一种很好方式。
  13. 当使用CompareTo()比较枚举时,比较的是比较的是枚举类对象的ordinal的值。
  14. 当使用equals()比较枚举的时候,比较的是内存地址,和等号作用相同。

JDK1.5新特性

这个是jdk1.5新特性,这个还是很有用的。

定义

常见的使用场景:性别;星期;季节。这些固定取值空间的。

public enum 枚举名{
    
    
 	枚举体(常量列表),常量之间用逗号隔开,最后的分号可以有,亦可以没有
 }
 
//下面写个性别的枚举。
public enum Gender {
    
    
	male,female;
}

枚举的本质

以上面的Gender枚举来讲。

  • 定义一个继承Enum的类Gender,Gender类是用final修饰的。
  • 为每个枚举实例对应创建一个类对象。这些类对象使用public static final 修饰的,同时生成一个数组,用于保存所有的类对象。
  • 生成一个静态代码块,用于初始化类对象和类对象数组
  • 生成一个构造方法,构造方法有参,参数的含义是
  • 生成一个静态的values()方法,返回所有的类对象。
  • 生成一个静态的valuesOf()方法,根据参数返回对应的类实例

枚举和字符串之间的相互转化

public enum Gender  {
    
    
	male,female;
}

public class Person {
    
    
	private String name;
	private int age ;
	private Gender gender;
	public String getName() {
    
    
		return name;
	}
	public void setName(String name) {
    
    
		this.name = name;
	}
	public int getAge() {
    
    
		return age;
	}
	public void setAge(int age) {
    
    
		this.age = age;
	}
	
	public Gender getGender() {
    
    
		return gender;
	}
	public void setGender(Gender gender) {
    
    
		this.gender = gender;
	}
	
	@Override
	public String toString() {
    
    
		return "Person [name=" + name + ", age=" + age + ", gender=" + gender + "]";
	}
	public Person(String name, int age, Gender gender) {
    
    
		super();
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	public Person() {
    
    
		super();
	}
	
}

public class Demo {
    
    

	public static void main(String[] args) {
    
    
		Person person = new Person("张三" , 18 , Gender.female);
		person.toString();
		Gender gender = Gender.female;
		//枚举与String类型的转化
		 String str = gender.toString();
		 System.out.println(str);
		 
		 //String 转化为枚举
		 Gender gender1 = Enum.valueOf(Gender.class, "female");
		 System.out.println(gender1);
		 //遍历枚举类
		 for( Gender gender2: Gender.values()) {
    
    
			 System.out.println(gender2);
		 }
		 
		 //
	}

}

猜你喜欢

转载自blog.csdn.net/toomemetoo/article/details/113053428