Java 枚举

本文介绍了Java枚举的特点,如它是受限制的类,可以有构造方法和方法,以及编译时的优势。还通过组织枚举和策略枚举的示例展示了其在代码可读性和功能扩展中的应用。
摘要由CSDN通过智能技术生成

枚举

  1. 枚举(enum)全称为 enumeration, 是 JDK 1.5 中引入的新特性。
  2. 尽管枚举看起来像是一种新的数据类型,实际上,枚举就是一种受限制的类,并且具有自己的方法。创建自己的enum类时,这个类继承自 java.lang.Enum。

特点

  1. 枚举就是一个受限制的类, 默认继承自 java.lang.Enum.
  2. 枚举的第一行必须定义该枚举类型的对象.
  3. 枚举类型对象默认添加: public static final
  4. 枚举没有明确继承类.(自定义枚举继承自 java.lang.Enum, Enum 默认继承自 Object).
  5. 枚举类不能被继承.
  6. 枚举里面可以有构造方法, 成员方法, 静态方法, 抽象方法.
  7. 枚举可以实现接口

优势

  1. 增强代码可读性.
  2. 枚举类型可以直接与数据库交互.
  3. switch 语句优势.
  4. 编译优势: 枚举类编译时, 没有把常量编译到代码中, 即使常量发生变化, 也不会影响引用常量的类.
  5. 将常量组织起来, 统一管理.
  6. 由于 常量内存地址唯一, 使用枚举可以通过 == 来进行两个值之间的比较, 性能会有所提高.

枚举案例

枚举案例-组织枚举

含义:可以将类型相近的枚举通过接口或类组织起来(但是一般用接口方式进行组织)

原因是:

  1. Java接口在编译时会自动为enum类型加上public static修饰符;
  2. Java类在编译时会自动为 enum 类型加上static修饰符;
  3. 在类中组织 enum,如果你不给它修饰为 public,那么只能在本包中进行访问。

代码实例

public interface IErrorCode {

	enum LoginErrorCodeEn implements INumberEnum{

		OK(1,"登录成功"),ERROR_A(-1,"验证码错误"),ERROR_B(-2,"密码错误"),ERROR_C(-3,"用户已登录");

		private int code;
		private String description;

		LoginErrorCodeEn(int code,String description){
			this.code = code;
			this.description = description;
		}

		@Override
		public int getCode() {
			return code;
		}
		@Override
		public String getDescription() {
			return description;
		}
	}

	enum RigsterErrorCodeEn implements INumberEnum{

		OK(1,"注册成功"),ERROR_A(-1,"账号已存在");

		private int code;
		private String description;

		RigsterErrorCodeEn(int code,String description){
			this.code = code;
			this.description = description;
		}

		@Override
		public int getCode() {
			return code;
		}
		@Override
		public String getDescription() {
			return description;
		}
	}

}

interface INumberEnum {
	int getCode();
	String getDescription();
}
枚举案例–策略枚举

优点:这种枚举通过枚举嵌套枚举的方式,将枚举常量分类处理。
这种做法虽然没有switch语句简洁,但是更加安全、灵活。

代码实例

public enum Salary {
	JAVA(SalaryType.TEACHER),
    HTML(SalaryType.TEACHER),
    PYTHON(SalaryType.TEACHER),
	PRINCIPAL(SalaryType.ADMINISTRATION);//校长
	
	private final SalaryType salaryType;
	
	Salary(SalaryType salaryType){
		this.salaryType = salaryType;
	}
	
    //baseSalary-底薪 classHour-课时 teachingHourSubsidy-课时费 achievements-绩效
	double getSalary(double baseSalary,int classHour,double teachingHourSubsidy,double achievements){
		return salaryType.getSalary(baseSalary, classHour, teachingHourSubsidy, achievements);
	}
	
	//策略枚举
	private enum SalaryType {
		
		TEACHER {//老师
			@Override
			double getSalary(double baseSalary, int classHour, double teachingHourSubsidy,
					double achievements) {
				return baseSalary + classHour*teachingHourSubsidy + achievements;
			}
		},
		ADMINISTRATION {//行政人员
			@Override
			double getSalary(double baseSalary, int classHour, double teachingHourSubsidy,
					double achievements) {
				return baseSalary + achievements;
			}
		};
		
		abstract double getSalary(double baseSalary,int classHour,double teachingHourSubsidy,double achievements);
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值