黑马程序员——黑马学习日志之二十 Java高新技术(二)
------- 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高新技术(二)相关推荐
- 【C++】黑马程序员 C++学习课程—C++核心编程
[C++]黑马程序员 C++学习课程-C++核心编程 黑马程序员 C++学习课件, 为自用版本,单纯为了学习和查找资料更加方便 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓 ...
- 2022黑马程序员-前端学习第一阶段(Day01-HTML的认知)
HTML的认知-Day01 学习笔记打卡 HTML认知 基础概念铺垫(了解) 认识网页 五大浏览器和渲染引擎 Web标准(了解) HTML初体验 HTML的感知 HTML骨架结构 开发工具的使用 语法 ...
- 黑马程序员Maven学习笔记
前言 这里是黑马程序员Maven学习笔记分享,这是视频链接. 我还有其它前端内容的笔记,有需要可以查看. 文章目录 前言 基础 Maven简介 Maven是什么 Maven的作用 Maven的下载 M ...
- 黑马程序员Javaweb学习笔记01
该博客主要记录在学习黑马程序员Javaweb过程的一些笔记,方便复习以及加强记忆 文章目录 一 . BS架构,HTTP协议 http请求数据格式和相应数据格式 二 . web服务器 2.1 tomca ...
- 黑马程序员SSM-MyBatisPlus学习笔记
目录 一.MyBatisPlus简介 1.1 SpringBoot整合MyBatisPlus入门程序 1.2 MyBatisPlus概述 二.标准数据层开发 2.1 标准数据层CRUD功能 2.2 分 ...
- 黑马程序员C++学习笔记(第三阶段核心:STL)--- 更新中
目录 迭代器 序列式容器 vector -- 可随机访问 list -- 不支持随机访问 deque -- 动态 关联式容器 -- 红黑树 map multimap set multiset -- 废 ...
- 黑马程序员视频教程学习mybatis框架常用注释SQL语句学习笔记?
mybatis学习笔记 常用注释增删改查SQL语句 常用注释拓展SQL语句 解决实体类属性和数据库表中的属性名称不相同的问题: mybatis注解之一对一查询: mybatis注解之一对多查询: my ...
- 黑马程序员C++学习-01
课程视频链接:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 目的:为了区分C语言和C++的区别,并且在学习的过程中,两者进行比较 笔记方式:只写C语言和C ...
- 黑马程序员C++学习笔记<第一阶段_基础篇>
配套视频网址: 黑马程序员:http://yun.itheima.com/course/520.html?bili B站:https://www.bilibili.com/video/BV1et411 ...
最新文章
- C++ Primer 5th笔记(chap 19 特殊工具与技术)链接指示: extern “C“
- [BZOJ 2844] albus就是要第一个出场
- 【ArcGIS遇上Python】ArcGIS Python将多个文件夹内的分幅数据整合到同一个文件夹内——以Globeland30数据为例
- 使用Fabric8在Kubernetes中使用Camel和CDI
- 盘点那些有“数学味”的建筑
- 分时操作系统和多道程序操作系统的区别
- 别人回答工作中的问题,要自行判断是否正确
- RS485接口电路学习
- 【编译原理】自上而下语法分析(C/C++源码+实验报告)
- Xshell连接新浪云服务器
- hmailserver的反垃圾邮件功能
- 百度地图 前端html,前端js调用百度地图常用基本功能
- 什么是React为什么使用React什么时候使用React
- Unity 打包和切换平台|Build Settings窗口介绍
- Loadrunner11破解详解 .
- vm安装中标麒麟v7.0
- 有符号数IMUL和无符号数MUL的使用
- python 小说人物分析_用python分析小说人物关系(二)——实战篇
- Could not find setter for ID on class com.iflytek.civilAffairs.pojo.MzywShswcYtwy
- 怎么看股票走势图(转贴)
热门文章
- 美国大学计算机视觉专业排名,美国大学计算机系统专业排名情况实用内幕分析大全...
- JavaScript数据结构——树Tree
- Docker swarm Docker stack
- python list 平均值_python list 最大值和平均值Python基础 - 文件拷贝
- ASR6500S低功耗LoRa+射频前端LPWAN应用芯片
- python中的格式化输出
- 【Python自制工具分享】PySimpleGUI实现桌面翻译神器
- 彩色图片亮度放大后 色彩不失真的方法
- android目录结构
- Etag与HTTP缓存机制