java基础篇2之枚举
1、为什么要有枚举
问题:要定义星期几或者性别的变量,该怎么定义?
假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday=0;
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会报错,
枚举可以让编译器在编译时就可以控制源程序中填写的非法制,普通变量的方式在开发阶段无法实现这一目标
2、用普通类如何实现枚举功能,定义一个WeekDay的类来模拟枚举功能
- 私有的构造方法
- 每个元素分别用一个公有的静态成员变量表示
- 可以有弱冠公有方法或者抽象方法,例如,要提供nextDay方法必须使抽象的
采用抽象方法定义nextDay就将大量的if else语句庄毅成一个个独立的类。
public class WeekDay{
private WeekDay(){}
public final static WeekDay SUN = new WeekDay(){
@Override
public WeekDay nextDay(){
return MON;
}
};
public final static WeekDay MON = new WeekDay(){
@Override
public WeekDay nextDay(){
return SUN;
}
};
public abstract WeekDay nextDay();
/*public WeekDay nextDay(){
if(this == SUN){
return MON;
}else{
return SUN;
}
}*/
public String toString(){
return this ==SUN?"SUN":"MON";
}
}
public class EnumTest{
WeekDay weekday = WeekDay.SUN;
System.out.println(weekday.toString());
System.out.println(weekday.nextDay());
}
3、枚举的基本应用
扩展:枚举类的values,valueOf,name,toString,ordinal方法
总结:枚举是一种特殊的类,其中每个元素都是该类的一个实例对象,例如 调用WeekDay.SUN.getClass().getName
public class EnumTest{
public static void main(String[] args){
WeekDay weekday2 = WeekDay.FRI;
System.out.println(weekday2);
WeekDay.valueOf("SUN").toString();
WeekDay.values().length;
}
public enum WeekDay{
SUN,MON,TUE,WED,THI,FRI,SAT
}
}
4、带有构造方法的枚举
public class EnumTest{
public static void main(String[] args){
WeekDay weekday2 = WeekDay.FRI;
System.out.println(weekday2);
WeekDay.valueOf("SUN").toString();
WeekDay.values().length;
}
public enum WeekDay{
SUN(1),MON,TUE,WED,THI,FRI,SAT;
//放在参数列表之后
private WeekDay(){...};
private WeekDay(int day){...};
}
}
5、带有抽象方法的枚举
//子类实现父类的抽象方法
public enum TrafficLamp(){
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time = time;
}
}
枚举只有一个成员时,就可以作为一个单例的实现方式
java基础篇2之枚举的更多相关文章
- 小白—职场之Java基础篇
java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...
- Java基础篇(JVM)——字节码详解
这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...
- java基础篇---I/O技术
java基础篇---I/O技术 对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...
- 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇
Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...
- java基础篇---HTTP协议
java基础篇---HTTP协议 HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...
- java基础篇---I/O技术(三)
接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...
- Java基础篇 - 强引用、弱引用、软引用和虚引用
Java基础篇 - 强引用.弱引用.软引用和虚引用 原创零壹技术栈 最后发布于2018-09-09 08:58:21 阅读数 4936 收藏展开前言Java执行GC判断对象是否存活有两种方式其中一种是 ...
- java基础篇 之 构造器内部的多态行为
java基础篇 之 构造器内部的多态行为 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...
- java基础篇1
JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...
随机推荐
- ruby 发送邮件
产品构建.打包.部署完需要发送邮件通知相关人员进行验证.请看过程 #encoding:utf-8 require 'mail' #~ branch = ARGV.to_s.sub('[','').su ...
- [暑假集训--数论]poj1595 Prime Cuts
A prime number is a counting number (1, 2, 3, ...) that is evenly divisible only by 1 and itself. In ...
- android 微信开发交流群
有效期很短,可加个人微信 如果已过有效期,加我个人微信,我拉你进群
- 洛谷P1135 奇怪的电梯
题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼 (1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮: ...
- python编程(python开发的三种运行模式)【转】
转自:http://blog.csdn.net/feixiaoxing/article/details/53980886 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 单循环 ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---15
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《手把手教你学C语言》学习笔记(2)---学习C语言的目标和方法
一.学习C语言的目标主要是: 熟练掌握C语言的关键字,语法规则,程序控制等: 掌握基本的数据结构,数组.链表.栈和队列等: 掌握C语言中指针和内存.数组与指针.函数与指针.变量和指针.结构体和指针.硬 ...
- Scrapy笔记:CrawSpider中rules中的使用
scrapy.spiders.crawl.CrawlSpider类的使用 这个类比较适用于对网站爬取批量网页,相比于Spider类,CrawlSpider主要使用规则(rules)来提取链接 rule ...
- LeetCode OJ-- Binary Tree Maximum Path Sum ***
https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/ 给一棵二叉树,路径可以从任一点起,到任一点结束,但是可以连成一个路径的.求 ...
- C# asp.net 导出数据库二进制字段到excel
前台的话不多说,本次只详细说下后台导出数据库中的二进制字段,上传下次有时间再说,有比较急的可以留言我 之前在网上搜了关于下载导出二进制字段的资料,发现都不是我想要的,都只是把上传的文件放到服务器然后下 ...