接下来本章的重点来了,就是枚举;

枚举是什么?

Java中的枚举是一种特殊的类,不但可以添加字段,构造方法,普通方法,甚至可以添加main()方法,

为什么需要枚举?

一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。

JDK 5新增的enum关键字用于定义一个枚举类。

枚举类也是一种特殊形式的Java类。

枚举类和普通类的区别:

使用 enum定义的枚举类默认继承了java.lang.Enum类

枚举类的构造器只能使用 private访问控制符

枚举类的所有实例必须在枚举类中显式列出(,分隔;结尾).列出的实例系统会自动添加public static final修饰

JDK5中扩展了switch语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型

若枚举只有一个成员,则可以作为一种单例模式的实现方式

//枚举类1(没有参数的构造方法)

package com.hbsi.enum2;

public class Student {

private String name;

private Grade grade;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Grade getGrade() {

return grade;

}

public void setGrade(Grade grade) {

this.grade = grade;

}

}

enum Grade{

A,B,C,D,E;//无参数

}

/*//手动实现枚举类代码

class Grade{

private Grade(){}

public static final Grade A=new Grade();

public static final Grade B=new Grade();

public static final Grade C=new Grade();

public static final Grade D=new Grade();

public static final Grade E=new Grade();

}*/

枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰

枚举类的使用 private final 修饰的属性应该在构造器中为其赋值

若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数

//有参数的枚举类

enum Grade{

A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0");

private String value;

private Grade(String value){

this.value=value;

}

public String getValue() {

return value;

}

}

枚举类3(使用内部类)

enum Grade{

A("100-90") {

@Override

public String toLocalGrade() {

// TODO Auto-generated method stub

return "优";

}

},

B("89-80") {

@Override

public String toLocalGrade() {

// TODO Auto-generated method stub

return "良";

}

},

C("79-70") {

@Override

public String toLocalGrade() {

// TODO Auto-generated method stub

return "中";

}

},

D("69-60") {

@Override

public String toLocalGrade() {

// TODO Auto-generated method stub

return "可";

}

},

E("59-0") {

@Override

public String toLocalGrade() {

// TODO Auto-generated method stub

return "差";

}

};

private String value;

private Grade(String value){

this.value=value;定义构造方法,传参;

}

public String getValue() {

return value;//获取value值

}

public abstract String toLocalGrade();//定义抽象方法

}

获取各个等级对应的中文

A(“100-90”), 优

B(“89-80”), 好

C(“79-70”), 良好

D(“69-60”), 及格

E(“59-0”); 不及格

要求:学生的grade只能是a,b,c,d,e五个级别。可以给学生设置成绩,并可以输出学生成绩情况(优,良,中,可,差)

package com.hbsi.enum4;

public class Student {

private String name;

private Grade grade;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Grade getGrade() {

return grade;

}

public void setGrade(Grade grade) {

this.grade = grade;

}

}

enum Grade{

A("100-90") {

@Override

public String toLocalGrade() {

// TODO Auto-generated method stub

return "优";

}

},

B("89-80") {

@Override

public String toLocalGrade() {

// TODO Auto-generated method stub

return "良";

}

},

C("79-70") {

@Override

public String toLocalGrade() {

// TODO Auto-generated method stub

return "中";

}

},

D("69-60") {

@Override

public String toLocalGrade() {

// TODO Auto-generated method stub

return "可";

}

},

E("59-0") {

@Override

public String toLocalGrade() {

// TODO Auto-generated method stub

return "差";

}

};

private String value;

private Grade(String value){

this.value=value;

}

public String getValue() {

return value;

}

public abstract String toLocalGrade();

}

package com.hbsi.enum4;

public class Demo1 {

/**

* @param args

*/

public static void main(String[] args) {

Student s=new Student();

s.setName("张三");

s.setGrade(Grade.A);

String str=Grade.B.getValue();

String str1=Grade.B.toLocalGrade();

System.out.println(str+"...."+str1);

}

}

结果::

89-80....良

Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法。常用方法:

name():返回此枚举常量的名称,在其枚举声明中对其进行声明

ordinal():返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

valueof(Class enumClass, String name):返回带指定名称的指定枚举类型的枚举常量。 静态方法

values() 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便。

java 枚举高级应用_java高级编程之枚举相关推荐

  1. java高级知识点_JAVA高级阶段知识点汇总

    一.集合框架和泛型 1.定义 集合框架用于存储一组长度不定的元素. 2.常用的接口和类 接口:Collection.List.Set.Map.Iterator 类:ArrayList.LinkedLi ...

  2. java 内嵌调用_Java高级开发必会的50个性能优化的细节(珍藏版)

    在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. ● 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载 ...

  3. java高级内容_Java高级程序员必备的内容知识

    一段时间没有回顾多线程相关知识了,虽然工作中会用到一些多线程的内容,但都偏向于基础,今天java培训带大家重读多线程相关内容,发现有些东西还是需要注意下.这些一般是面试高频问题奥. 了解并发的内幕是一 ...

  4. java高级类_Java高级类特性(一)

    权限类内同包不同包子类不同包非子类 private √ × × × default √ √ × × protected √ √ √ × public √ √ √ √ 四.super关键字的使用 pac ...

  5. java高级应用_Java高级应用简笔

    1. Annotation 使用范围: package, class, method, field 常用: @Override, @Deprecated, @SuppressWarnings 自定义注 ...

  6. java中override快捷键_Java高级应用简笔

    1. Annotation 使用范围: package, class, method, field 常用: @Override, @Deprecated, @SuppressWarnings 自定义注 ...

  7. java高级教程_Java高级教程02

    1.Java线程 1.1. 多线程和多进程 多进程:操作系统能够同时进行多个任务: 每个app(word,播放器,浏览器)可以同时运行 多线程:同一应用程序中哟多个顺序流同时执行 线程是进程中的一部分 ...

  8. java高级规范_Java高级规范之二

    二十一.提交java代码前应该检查是否有没用的语句,如:System.out.println(); jsp页面上面是否有alert调试信息 不规范示例:暂无 规范实例:暂无 解析:因为如果保留了有可能 ...

  9. java高级考试题_JAVA高级考试题

    一.单项选择题 (共36题,36分) 1. 已知一个引用类型变量myvar指向了一个流对象,在程序中出现了如下语句:myvar.flush(); myvar.close(); 则myvar所指向的对象 ...

最新文章

  1. flask之url_for()函数解析
  2. 【NLP_Stanford课堂】正则表达式
  3. golang基于UDP完成
  4. [cogs347]地震
  5. OPT和LRU页面置换算法C语言代码,页面置换算法模拟——OPT、FIFO和LRU算法.doc
  6. 上传及更新代码到github(以及如何在vscode上提交自己的代码)
  7. CentOS 6.0正式版终于发布
  8. Windows 桌面主题,桌面背景
  9. 如何在网页读取用户IP,操作系统版本等数据demo
  10. 在微型计算机系统中 下列叙述正确的是,全国2011年10月高等教育自学考试计算机应用基础试题及答案...
  11. Linux文件系统概述:硬盘驱动>通用块设备层>文件系统>虚拟文件系统(VFS)
  12. 【Ahoi2005】【BZOJ1968】COMMON 约数研究(水题,乱搞,约数)
  13. shell脚本中定义路径变量出现的BUG
  14. 新春测 kinect motor
  15. kali 32位 更换 xfce4 桌面
  16. 经验模态分解python_EMD经验模态分解
  17. java二级大题分值_2017年9月全国计算机等级考试各级别题型分值
  18. php 安装扩展管理工具 pecl
  19. VMware虚拟机ubuntu指定使用主机的wifi无线网卡
  20. 将现有android项目打包成aar包供第三方应用调用

热门文章

  1. 《我坚信》——读书笔记
  2. 套料软件的一次飞跃-XSuperMES
  3. 设备管理之磁盘存储管理
  4. python kazoo模块的使用
  5. (待补充)常用数据结构学习
  6. 数据分析与建模的基础知识
  7. Adams View Error: MSC_LICENSE_FILE = C:\MSC.Software\MSC.Licensing\11.9\license.dat
  8. 有赞个性化推荐能力的演进与实践
  9. python如何确定拐点_经典评分卡模型python实现(mdlp离散化,woe拐点判断以及iv值筛选变量)...
  10. 51nod 1533 CF538F