------- android培训、java培训、期待与您交流! ----------

黑马学习日志之二十 Java高新技术(二)

1枚举

问题:要定义星期几或性别的变量,该怎么定义?
假设用1-7分别表示星期一到星期日,(一般0表示星期日 6表示星期六)
但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。
枚举:枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

用普通类如何实现枚举功能:定义一个Weekday的类来模拟枚举功能。 
1 私有的构造方法
2 每个元素分别用一个公有的静态成员变量表示
3 可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。

public abstract class WeekDay1 {

private WeekDay1(){}

public final static WeekDay1 SUN = new WeekDay1(){

@Override

public WeekDay1 nextDay() {

// TODO Auto-generated method stub

return MON;

}

};

public final static WeekDay1 MON = new WeekDay1(){

@Override

public WeekDay1 nextDay() {

// TODO Auto-generated method stub

return SUN;

}

};

public abstract WeekDay1 nextDay();

/*public WeekDay nextDay(){

if(this == SUN){

return  MON;

}else{

return SUN;

}

}

*/

public String toString(){

return this==SUN?"SUN":"MON";

}

}

2 枚举的基本应用

定义枚举使用的关键字是enum 

方法

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

string ordinal:获取该元素的序号

static valueOf: 返回带指定名称的指定枚举类型的枚举常量。

static values:返回枚举中的所有元素的数组

定义一个名称为枚举类,那么该类就称为了一个枚举类,枚举类中的每个元素都是枚举对象,其中在枚举对象的后面加小括号,并书写其构造函数,就会调用该构造函数。

例子:

public static void main(String[] args) {

Weekday week = Weekday.MON;

String name = week.name();

System.out.println(name);

int num = week.ordinal();

System.out.println(num);

Weekday week1 = Weekday.valueOf("SUN");

System.out.println(week1);

Weekday[] arr = Weekday.values();

for (Weekday weekday : arr) {

System.out.println(weekday);

}

TrafficLamp color  = TrafficLamp.RED;

System.out.println(color);

}

public enum Weekday{

SUN,MON,TUS,WNS,THUS,FRI,SAT;

private Weekday(){

System.out.println("first");

}

private Weekday(int day){

System.out.println("second");

}

}

3 带有构造方法的枚举

枚举的构造函数书写规则

(1)枚举的构造函数要写在每个对象元素的下方,并使用分号隔开
(2)枚举中的构造函数要使用private修饰,使之不能创建该枚举类的对象
(3)在枚举中调用对象,默认使用空参数的构造函数
(4)在枚举中可以定义含参数的构造函数,调用的方法是在对象元素后加小括号,并且传入参数,就实现了对含参数构造函数的调用。
(5)枚举元素MON和MON()的效果是一样的。

例子:

public enum WeekDay{

SUN(1),MON(),TUE,WED,THI,FRI,SAT;

private WeekDay(){System.out.println("first");}

private WeekDay(int day){System.out.println("second");}

}

4 实现带有抽象方法的枚举

定义枚举TrafficLamp

实现不同的next方法

实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。增加上表示时间的构造方法。

例子:

public enum TrafficLamp{

GREEN(45) {

public TrafficLamp next() {

return YELLOW;

}

},RED(60){

public TrafficLamp next(){

return GREEN;

}

},YELLOW(5){

public TrafficLamp next(){

return RED;

}

};

public abstract TrafficLamp next();

private int time;

private TrafficLamp(int time){

this.time = time;

}

}

------- android培训、java培训、期待与您交流! ----------

黑马程序员——黑马学习日志之二十 Java高新技术(二)相关推荐

  1. 【C++】黑马程序员 C++学习课程—C++核心编程

    [C++]黑马程序员 C++学习课程-C++核心编程 黑马程序员 C++学习课件, 为自用版本,单纯为了学习和查找资料更加方便 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓 ...

  2. 2022黑马程序员-前端学习第一阶段(Day01-HTML的认知)

    HTML的认知-Day01 学习笔记打卡 HTML认知 基础概念铺垫(了解) 认识网页 五大浏览器和渲染引擎 Web标准(了解) HTML初体验 HTML的感知 HTML骨架结构 开发工具的使用 语法 ...

  3. 黑马程序员Maven学习笔记

    前言 这里是黑马程序员Maven学习笔记分享,这是视频链接. 我还有其它前端内容的笔记,有需要可以查看. 文章目录 前言 基础 Maven简介 Maven是什么 Maven的作用 Maven的下载 M ...

  4. 黑马程序员Javaweb学习笔记01

    该博客主要记录在学习黑马程序员Javaweb过程的一些笔记,方便复习以及加强记忆 文章目录 一 . BS架构,HTTP协议 http请求数据格式和相应数据格式 二 . web服务器 2.1 tomca ...

  5. 黑马程序员SSM-MyBatisPlus学习笔记

    目录 一.MyBatisPlus简介 1.1 SpringBoot整合MyBatisPlus入门程序 1.2 MyBatisPlus概述 二.标准数据层开发 2.1 标准数据层CRUD功能 2.2 分 ...

  6. 黑马程序员C++学习笔记(第三阶段核心:STL)--- 更新中

    目录 迭代器 序列式容器 vector -- 可随机访问 list -- 不支持随机访问 deque -- 动态 关联式容器 -- 红黑树 map multimap set multiset -- 废 ...

  7. 黑马程序员视频教程学习mybatis框架常用注释SQL语句学习笔记?

    mybatis学习笔记 常用注释增删改查SQL语句 常用注释拓展SQL语句 解决实体类属性和数据库表中的属性名称不相同的问题: mybatis注解之一对一查询: mybatis注解之一对多查询: my ...

  8. 黑马程序员C++学习-01

    课程视频链接:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 目的:为了区分C语言和C++的区别,并且在学习的过程中,两者进行比较 笔记方式:只写C语言和C ...

  9. 黑马程序员C++学习笔记<第一阶段_基础篇>

    配套视频网址: 黑马程序员:http://yun.itheima.com/course/520.html?bili B站:https://www.bilibili.com/video/BV1et411 ...

最新文章

  1. C++ Primer 5th笔记(chap 19 特殊工具与技术)链接指示: extern “C“
  2. [BZOJ 2844] albus就是要第一个出场
  3. 【ArcGIS遇上Python】ArcGIS Python将多个文件夹内的分幅数据整合到同一个文件夹内——以Globeland30数据为例
  4. 使用Fabric8在Kubernetes中使用Camel和CDI
  5. 盘点那些有“数学味”的建筑
  6. 分时操作系统和多道程序操作系统的区别
  7. 别人回答工作中的问题,要自行判断是否正确
  8. RS485接口电路学习
  9. 【编译原理】自上而下语法分析(C/C++源码+实验报告)
  10. Xshell连接新浪云服务器
  11. hmailserver的反垃圾邮件功能
  12. 百度地图 前端html,前端js调用百度地图常用基本功能
  13. 什么是React为什么使用React什么时候使用React
  14. Unity 打包和切换平台|Build Settings窗口介绍
  15. Loadrunner11破解详解 .
  16. vm安装中标麒麟v7.0
  17. 有符号数IMUL和无符号数MUL的使用
  18. python 小说人物分析_用python分析小说人物关系(二)——实战篇
  19. Could not find setter for ID on class com.iflytek.civilAffairs.pojo.MzywShswcYtwy
  20. 怎么看股票走势图(转贴)

热门文章

  1. 美国大学计算机视觉专业排名,美国大学计算机系统专业排名情况实用内幕分析大全...
  2. JavaScript数据结构——树Tree
  3. Docker swarm Docker stack
  4. python list 平均值_python list 最大值和平均值Python基础 - 文件拷贝
  5. ASR6500S低功耗LoRa+射频前端LPWAN应用芯片
  6. python中的格式化输出
  7. 【Python自制工具分享】PySimpleGUI实现桌面翻译神器
  8. 彩色图片亮度放大后 色彩不失真的方法
  9. android目录结构
  10. Etag与HTTP缓存机制