Java枚举介绍_java枚举介绍

枚举类型 :枚举常量的一组集合,包含者一些操作方法,枚举类是不可变的,通常用作单实例操作。

包含的方法

自带静态方法  values() 返回枚举类中枚举常量数组 (按枚举常量声明的顺序返回)

toString()方法    返回枚举常量名称。

静态方法valueOf(String name)   返回指定名称(name指的是默认toString方法返回的值,即类型常量的名称)的枚举常量

ordinal()  返回指定枚举常量在枚举类型中声明的位置,位置从0开始哦

枚举类型中  每一个枚举常量都要实现,枚举类中的抽象方法,枚举常量就是一个静态变量。因此下面代码枚举类型常量需要放在自定义静态代码块之前

案例如下:

packagecom.effectJava.Chapter3;importjava.util.HashMap;importjava.util.Map;public enumOperation {

PLUS("+") {

@Overrideint apply(int a, intb) {return a +b;

}

}, MINUS("-") {

@Overrideint apply(int a, intb) {return a -b;

}

}, MULTI("*") {

@Overrideint apply(int a, intb) {return a *b;

}

}, DIVID("/") {

@Overrideint apply(int a, int b) {//测试代码没必要处理可能的异常

return a /b;

}

};//自定义的valueOf方法

private static final Mapmaps;static{

System.out.println("Initi Static Block");

maps= new HashMap<>();for(Operation operation : Operation.values()) {

maps.put(operation.symbol, operation);

}

}public staticOperation fromString(String symbol) {returnmaps.get(symbol);

}private finalString symbol;

Operation(String symbol) {

System.out.println(symbol);this.symbol =symbol;

}abstract int apply(int a, intb);//把symbol变为枚举常量的唯一标识后,

//最好定义一个fromString(String symbol)方法返回symbol唯一标识的枚举类型

public static voidmain(String... args) {

System.out.println(Operation.PLUS.apply(1, 2));//Operation.valueOf("ss");

System.out.println(Operation.fromString("+"));

}

}

java 程序初始化顺序

1.父类静态变量   2.父类静态代码块 3.子类静态变量 4.子类静态代码块 5.父类非静态变量 6.父类非静态代码块,7.父类构造器,8.子类非静态变量 9.子类非静态代码块 10.子类构造器

序列索引实现香草分类

packagecom.effectJava.Chapter3;importsun.misc.SharedSecrets;importjava.util.EnumMap;importjava.util.HashSet;importjava.util.Set;public classHerb {public enumType {ANNUAL, PERENNIAL, BIENNIAL,}private finalString name;private finalType type;

Herb(String name, Type type) {this.name =name;this.type =type;

}

@OverridepublicString toString() {returnname;

}//对植物进行分类

public static voidmain(String... args) {

Herb herbs[]= new Herb[]{new Herb("herb1", Type.PERENNIAL), new Herb("herb2", Type.ANNUAL), new Herb("herb3", Type.ANNUAL), new Herb("herb4", Type.BIENNIAL)};//1.通过枚举常量的位置序号来对植物的类别分类位置//构造类别数组

Set[] her = (Set[]) newSet[Type.values().length];for (int i = 0; i < her.length; i++) {

her[i]= new HashSet();

}//对植物进行分类

for(Herb herb : herbs) {

her[herb.type.ordinal()].add(herb);

}for (int i = 0; i < her.length; i++) {

System.out.printf("%s : %s%n", Herb.Type.values()[i], her[i]);

}

System.out.println(SharedSecrets.getJavaLangAccess().getEnumConstantsShared(Type.class));

//EnumMap分类  对每种香草分类,//2. 使用EnumMap来实现植物分类

System.out.println(" 使用EnumMap来实现植物分类");

EnumMap> typeSetEnumMap = new EnumMap<>(Type.class);for(Herb.Type t : Herb.Type.values()) {

typeSetEnumMap.put(t,new HashSet());

}for(Herb h : herbs) {

typeSetEnumMap.get(h.type).add(h);

}

System.out.println(typeSetEnumMap);

}

}

EnumMap状态转移两种实现

packagecom.effectJava.Chapter3;//转移关系

public enumPhase {

SOLID, LIQUID, GAS;public enumTransition {

MELT, FREEZE, BOIL, CONDENSE, SUBLIME, DEPOSIT;private static final Transition[][] transitions = {{null, MELT, SUBLIME}, {FREEZE, null, BOIL}, {DEPOSIT, CONDENSE, null}};public staticTransition from(Phase src, Phase dest) {returntransitions[src.ordinal()][dest.ordinal()];

}

}

}

优化之后的代码

packagecom.effectJava.Chapter3;importjava.util.EnumMap;importjava.util.Map;//通过 Map> 来表示转移关系

public enumPhaseModify {

SOLID,LIQUID,GAS;public enumTransition {

MELT(SOLID, LIQUID),

FREEZE(LIQUID, SOLID),

BOIL(LIQUID, GAS),

CONDENSE(GAS, LIQUID),

SUBLIME(SOLID, GAS),

DEPOSIT(GAS, SOLID);private finalPhaseModify src;private finalPhaseModify dst;

Transition(PhaseModify src, PhaseModify dst) {this.src =src;this.dst =dst;

}private static final Map> map = new EnumMap>(PhaseModify.class);static{for(PhaseModify p : PhaseModify.values()) {

map.put(p,new EnumMap(PhaseModify.class));

}for(Transition trans : Transition.values()) {

map.get(trans.src).put(trans.dst, trans);

}

}public staticTransition from(Phase src, Phase dst) {returnmap.get(src).get(dst);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值