枚举enum

本文探讨了枚举与普通类的区别,强调枚举的构造方法私有,不能通过new或反射创建对象,从而保证了单例模式的安全性。枚举在防止多次实例化方面有其独特优势,同时枚举可以包含构造器和抽象方法。文章还提醒在定义枚举时,如果有构造参数,对应的枚举实例也需要提供相应参数。
摘要由CSDN通过智能技术生成

枚举和普通类的区别
枚举不能new创建对象,没有子类。 枚举的构造方法私有。
为什么要有枚举
单例模式有反射漏洞,可以通过反射创建。枚举解决,不能new,不能用反射。防止创建多个实例

注意点

构造器私有,如果传参,那么成员ONE(1)也有对应参数
也可以有抽象方法,

代码
public enum EnumTest{
//成员/对象
//数据字典
//两种表达方式
//男女/12
//两个实例(ONE、TWO)实例名称就是ONE、TWO
//放在代码首部
  ONE(val:1),{
  @Override
  public String getSay(){
  //this.say不能访问,因为是父类的
  //虽然属性是父类私有的,但是因为匿名内部类,还是可以访问到
  super.say="cba";
  return super.say;
  }
}
  TWO(val:2),{
  @Override
  public String getSay(){
  //this.say不能访问,因为是父类的
  //虽然属性是父类私有的,但是因为匿名内部类,还是可以访问到
  super.say="cba";
  return super.say;
  }
}


  private String say = "abc";
  public abstract String getSay();
  
}
//调用
psvm{
  sout(EnumTest.ONE.name());//输出ONE==toString
  sout(EnumTest.ONE.name());//输出序号  0
  sout(EnumTest.ONE.getDeclaringClass());//Class test(包).EnumTest
  sout(EnumTest.ONE.getClass());//Class test(包).EnumTest
  sout(EnumTest.valueOf("ONE"));//输出ONE

 
   public static void choice(EnumTest e){
   switch(e){
      case ONE:
        sout("one");
      case TWO:
        sout("two");
   }
   }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值