java java面向对象-枚举的操作细节

本文详细介绍了Java中枚举类型的使用方法,包括枚举常量的声明、枚举类中的方法如name()和ordinal()的使用,以及如何通过values()和valueOf()方法操作枚举对象。此外还探讨了枚举在单例模式中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20180415 java java面向对象-枚举的操作细节




20180415 java java面向对象-枚举的操作细节

枚举的使用:

1、枚举中的都是全局的、公共的静态常量,可以直接使用枚举类名调用,使用以下格式接受:
类名 接受名称=类名.常量名;
Weekday day = Weekday.Friday;

2、因为 java.lang.Enum类是所有枚举类的父类,所以所有的枚举对象都可以调用  Enum类中的方法;
重点关注两个方法,name();和ordinal();
eg:
String name=枚举对象.name();//返回枚举对象的常量名称(即生命的名称)

int ordinal=枚举对象.ordinal();//返回枚举对象的序号(从零开始)

eg:
System.out.println(Weekday.Friday.name());//输出Friday

System.out.println(Weekday.Friday.ordinal());//输出5(即Friday的序号是4)


toString();方法  与name()方法类似,
枚举对象的常量名称,eg:
String str=枚举对象.toString();

3、由编译器生成的两个枚举类的静态方法:
values ();//返回枚举类型数组
eg:
Wekday[] wd =Weekday.values();//返回该类里的所有常量

valueof(String name);//把一个指定名称的字符串转换成当前枚举中的常量
格式:
枚举类型 valueOf(String name);
eg:
System.out.println(Weekday.valueOf("Fri"));//输出  Fri

System.out.println(Weekday.valueOf("abc"));//显示编译错误,因为枚举类型中没有 abc 这个常量。


4、从java5开始出现枚举,从java5开始 switch也支持操作枚举类型。

eg:
switch(Weekday.Sun)
{
  case Mon:break;
  case Tue:break;
  case Wed:break;
}



所以switch只支持int类型,其他类型会在编译后自定提升为int类型。


switch支持枚举是因为底层使用的是枚举对象的ordinay(反编译后),而ordinay的类型依然是int类型。












枚举主要用来表示事物固定的类型。


推荐书籍《Effective java》。
在《Effective java》一书中提到,建议使用枚举类型做单例模式,很安全,即使使用反射也不能创建对象(而用类写的 单例模式(构造函数私有化),使用反射是可以创建对象的)。


用类写的 单例模式:
class ArrayUtil
{
  private static final ArrayUtil instance = new ArrayUtil();

  private Arrayutil(){};
 
  public static ArrayUtil getInstance()
  {
    return instance;
  }

  public void sort(int[] arr)
  {
    System,out.println("做排序...");
  }
}


class SingletonDemo
{
  public static void main(String[] args)
  {
      System,out.println(ArrayUtil.getInstance()  == ArrayUtil.getInstance());
      ArrayUtil.getInstance().sort(null);
  }
}


使用枚举实现单例模式:
enum ArrayUtil
{
  INSTANCE ;
  public void sort(int[] arr)
  {
    System,out.println("做排序...");
  }
}

class SingletonDemo
{
  public static void main(String[] args)
  {
      System,out.println(ArrayUtil.INSTANCE == ArrayUtil.INSTANCE);
      ArrayUtil.INSTANCE.sort(null);
  }
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值