Java 枚举

本文深入探讨了枚举类型的使用场景,特别是在Java中如何通过枚举实现单例模式,以及从JDK5.0开始,枚举类的简化创建方式。通过实例展示了手工创建枚举的复杂过程,并对比了使用枚举类的简洁性。文章还介绍了如何定义带有属性的枚举,为读者提供了全面的枚举类型理解。

*************************枚举 *************************************

JDK5.0的特性

一.为什么使用枚举


单例: 是为了保证一个类只有一个唯一的实例


枚举: 当一个类的对象 个数固定 的时候 推荐使用枚举


例如: 季节类、性别类、星期类

 

***********************手工创建枚举*****************************


package com.chapter18.枚举;

//手工创建枚举
public class Season {

private String name;
private String desc;

public static final Season SPRING = new Season("春天","趁春踏青");
public static final Season SUMMER = new Season("夏天","烈日炎炎");
public static final Season FALL = new Season("秋天","秋高气爽");
public static final Season WINTER = new Season("冬天","围炉赏雪");


//1.构造函数私有
private Season(){

}

private Season(String name, String desc) {
super();
this.name = name;
this.desc = desc;
}


//2.提供一个静态方法 创建4个对象的其中一个
public static Season getSeason(int sum){

switch(sum){
case 1:return SPRING;
case 2:return SUMMER;
case 3:return FALL;
case 4:return WINTER;
default:return null;
}

}



public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getDesc() {
return desc;
}

public void setDesc(String desc) {
this.desc = desc;
}

@Override
public String toString() {
return "Season [name=" + name + ", desc=" + desc + "]";
}

public static void main(String[] args) {

//1. 类名.对象名
System.out.println(Season.FALL);

//2. 类名.getSeason()方法获得对象
Season season = Season.getSeason(3);
System.out.println(season.getName() + "这真是一个" + season.getDesc() + "的季节!");
}


}


程序员自己手工创建枚举比较麻烦, 从JDK5.0开始, 有了枚举类..简化了枚举的编写


***********************************定义枚举**********************************************


package com.chapter18;

//定义一个枚举
public enum Season {

SPRING,SUMMER,FALL,WINTER;

public static void main(String[] args) {

Season season = Season.FALL;
//System.out.println(season);

Season[] seasonArr = Season.values();

for(Season s:seasonArr){
System.out.println(s);
}
}
}


***********************************定义带属性的枚举****************************************
package com.chapter18;

//定义一个枚举
public enum Season {

SPRING("春天","趁春踏青"),SUMMER("夏天","烈日炎炎"),FALL("秋天","秋高气爽"),WINTER("冬天","围炉赏雪");

private String name;
private String desc;

private Season(String name,String desc){
this.name = name;
this.desc = desc;
}



public String getName() {
return name;
}

 

public void setName(String name) {
this.name = name;
}

 

public String getDesc() {
return desc;
}

 

public void setDesc(String desc) {
this.desc = desc;
}

 

public static void main(String[] args) {

Season season = Season.FALL;
//System.out.println(season);

Season[] seasonArr = Season.values();

for(Season s:seasonArr){
System.out.println(s.getName() + "这真是一个" + s.getDesc());
}
}
}

 

转载于:https://www.cnblogs.com/MrTanJunCai/p/9906855.html

### Java 枚举的概念与使用方法 #### 什么是枚举? 在 Java 中,`enum` 是一种特殊的数据类型,用于定义一组固定常量合。通过使用 `enum`,可以提高代码的可读性和安全性。 #### 创建和使用枚举 以下是创建和使用枚举的基本方式: ```java public enum Color { RED, GREEN, BLUE; } ``` 上述代码定义了一个名为 `Color` 的枚举类,其中包含三个常量:`RED`, `GREEN`, 和 `BLUE`[^1]。 可以通过以下方式访问这些枚举值: ```java System.out.println(Color.RED); // 输出: RED ``` #### 单例模式中的应用 Java 枚举天然支持单例设计模式。由于每个枚举常量在整个 JVM 生命周期中仅存在一个实例,因此可以直接利用这一特性实现线程安全的单例模式。 示例如下: ```java public enum SingletonEnum { INSTANCE; public void doSomething() { System.out.println("Singleton doing something..."); } } // 调用单例方法 SingletonEnum.INSTANCE.doSomething(); ``` 此代码展示了如何通过枚举来实现单例模式,并调用其方法。 #### 序列化与反序列化的处理 当枚举被序列化后再进行反序列化时,JVM 确保返回的是原始的枚举实例而非新创建的对象。这进一步增强了枚举作为单例使用的可靠性。 #### 遍历枚举值 每一个枚举都隐含提供了一个静态方法 `values()`,该方法能够返回按声明顺序排列的所有枚举常量组成的数组。配合增强型 for 循环即可轻松遍历所有可能取值。 示例代码如下: ```java for (Color color : Color.values()) { System.out.println(color); } ``` 这段程序会依次输出 `RED`, `GREEN`, 和 `BLUE`[^3]。 #### 方法重载于枚举 除了简单的命名外,还可以给枚举添加字段以及构造器,甚至自定义行为逻辑的方法。 例子展示带参数的复杂枚举结构及其操作函数: ```java public enum Planet { MERCURY(3.30E23), VENUS(4.87E24), EARTH(5.98E24); private final double mass; // kilograms Planet(double mass) { this.mass = mass; } public double getMass() { return mass; } } Planet earth = Planet.EARTH; System.out.printf("Earth's mass is %.2f kg%n", earth.getMass()); ``` 这里我们不仅限定了行星名称还附加了质量属性并通过 getter 访问[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值