黑马程序员_枚举总结

/*

1、枚举:枚举就是一个类,也即一种数据类型,引用数据类型。只不过是一个特殊的类。
这个类的引用(变量)或者这种数据类型的变量(引用),它的值是由定义该数据类型的人来指定的,即
它的取值是在枚举中定义好的,就那么几个值,如果不是这些列出来的值,编译器在编译的时候就会报错。

2、枚举的好处:将一种数据类型的所有取值限定在指定范围内。使得该数据类型的变量在取值时,不会出现非法赋值的
情况,如果有,则可以在编译时期就被发现,避免了一些错误赋值导致的问题发生。

3、枚举的定义:
enum 枚举类型名 //枚举是一种特殊的类,所以其和普通类一样,如果定义在外部,则可被public/默认修饰,如果
//定义在内部成员位置上,则可以被public/protected/默认/private修饰。
{
枚举元素1,枚举元素2,枚举元素3,.....,枚举元素n;
//所有的枚举元素都是本类的一个引用,指向的是该类对象或者该类的子类对象。且都是
//公共静态常量(即public final static)

成员;
//包括成员方法和成员变量的定义,包括构造函数在内。所有的成员定义都必须在枚举元素列表的后面定义。
//另:构造方法默认是空参数的构造方法,且是私有的(private),如果要自定义构造方法,则也必须声明
//为私有(即private)。

}

4、枚举的用法:枚举是一种特殊的类,所以用法和类是一致的。即 枚举类型名 枚举变量名 = 枚举类型名.枚举元素名。

5、枚举实现的原理:可以通过普通类来模拟枚举的实现原理。

实现过程中关键字:静态常量,私有化构造方法,本类对象,属于本类的对象的成员方法



package cn.itcast.day25;

//自定义类来模拟枚举类

class WeekDay
{
	private WeekDay(){}//禁止外部创建本类对象

	public final static WeekDay SUN = new WeekDay(); //定义本类引用的所有取值。
	public final static WeekDay MON = new WeekDay();
	public final static WeekDay TUS = new WeekDay();
	public final static WeekDay WEN = new WeekDay();
	public final static WeekDay THI = new WeekDay();
	public final static WeekDay FRI = new WeekDay();
	public final static WeekDay SAT = new WeekDay();

	public WeekDay nextDay()
	{
		if(this == SUN)
			return MON;
		if(this == MON)
			return TUS;
		if(this == TUS)
			return WEN;
		if(this == WEN)
			return THI;
		if(this == THI)
			return FRI;
		if(this == FRI)
			return SAT;
		return SUN;
	}
	public String toString()
	{
		if(this == SUN)
			return "SUN";
		if(this == MON)
			return "MON";
		if(this == TUS)
			return "TUS";
		if(this == WEN)
			return "WEN";
		if(this == THI)
			return "THI";
		if(this == FRI)
			return "FRI";
		return "SAT";
	}
}
public class EnumTest {
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		System.out.println("Hello World!");
		WeekDay day = WeekDay.SUN;
		System.out.println(day.nextDay());
	}

}

  

 

  6、用JDK中的enum定义自定义的枚举类TrafficLamp

public abstract enum TrafficLamp
	{
		RED(30) //默认的不带参数的构造方法不存在了,所以必须指定是调用哪一个带参数的构造方法,用"()"标明。
		{
			public TrafficLamp nextLamp()
			{
				return GREEN;
			}
		},
		GREEN(30)
		{			//"{}"表示GREEN,这个元素指向的是TrafficLamp的子类的对象,子类为匿名内部类,
					//实现了父类的抽象方法,且根据"(30)"在创建该子类对象时,通过子类对象的不带参数的构造函数(即默认
					//构造函数)调用父类TrafficLamp的带参数的构造函数"Traffic(int)"。

			public TrafficLamp nextLamp()
			{
				return YELLOW;
			}
		},
		YELLOW(5)  //这条语句会做这样的事情:
				   //定义了一个匿名内部类,其父类是TrafficLamp,并且创建了一个该匿名内部类的对象,最后将该对象
				   //赋值给了父类TrafficLamp的引用YELLOW。
		{
			public TrafficLamp nextLamp()
			{
				return RED;
			}
		};  //最后面的这个分号必须有,表示以上是定义枚举元素列表。

		public abstract TrafficLamp nextLamp(); //抽象方法

		private int time; //私有成员变量

		private TrafficLamp(int time) //1,构造方法必须被私有 2,默认的不带参数的构造方法不存在了
		{this.time = time;}
	}
	//编译后的源文件一共会有四个类文件(.class文件),即:
	//					TrafficLamp.class 、TrafficLamp$1.class 、TrafficLamp$2.class 、TrafficLamp$3.class

  

7、java中JDK提供的枚举中常用方法:
valueOf(),values(),toString(),getClass(),getName()等。

*/

时间: 2024-08-16 16:31:17

黑马程序员_枚举总结的相关文章

黑马程序员_枚举

-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 与上篇文章介绍的相同,本文也是介绍jdk 1.5出现的新特性,本文将介绍枚举的相关用法. 在jdk 1.5 之前.Java可以有两种方式定义新类型:类和接口.对于大部分面向对象来说.这两种方法看起来似乎足够了.但是在一些特殊情况下,这些方法就不合适.例如:想定义一个Color类,它只能由Red.Green.Blue三种值,其他的任何形式都是非法的.那么jdk 1.5之前虽然可以构造出这样的发image,但是要做

黑马程序员_学习IOS之字典常用的方法

字典是无序的 数组是有序的.字典分为:可变字典和不可变字典  不可变字典对象 NSDictionary * dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil]; //value = ke

黑马程序员_交通灯管理系统

(1)项目的需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 例如: 由南向而来去往北向的车辆 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 平时开车过十字路口红绿灯的时候,也知道红绿灯运行的顺序 (1)任何方向的车,向右边转弯的时候,是不需要看红绿灯 (2)在十字路口,相对方向的红绿灯的工作方式是一样的,南相对与北,东相对与西,这把它分成两对 (3)红绿灯顺序,一对直行通道绿灯直行车辆,等直行变红,还是这对的车辆可以左转,等左转变红,就轮到下一对了.所以在设计程序的时候,只

黑马程序员_银行业务调度系统

1,项目的具体需求 银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费.电话费之类业务的客户). 异步随机生成各种类型的客户,生成各类型用户的概率比例为: VIP客户 :普通客户 :快速客户 = 1 :6 :3.   客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

黑马程序员_高新技术_1_Java反射

------- android培训.java培训.期待与您交流! ---------- 0.反射知识体系 下图为反射整体的知识体系,把握住此图也就全局上掌握住反射所有内容. 1.反射概论 1)反射概念 其实字面上可以这么理解反射,平时使用类时都是由类new出对象,而反射则是通过对象"反射"出类的信息,好比一个人照镜子可以看到人类的特征,而看出机制就是镜子反射. 2)Java对象两种类型 Java程序中的许多对象在运行时会出现两种类型:编译时类型和运行时类型.如下代码: Person p

黑马程序员_集合

集合1.集合和对象数组的区别: 数组的长度不可变,集合的可变: 数组可以存储基本数据类型和对象,集合只能存储对象. 集合的框架图 集合派系的顶层接口Collection1.Collection集合存储对象的方法: add(E e)将元素存储到集合中 addAll(Collection c)将一个集合添加到另外的集合中2.Collection集合提取对象的方法: 通过迭代器iterator中的方法:hasNext()和next()来取出 Iterator it=new iterator(); wh

黑马程序员_多线程

------- android培训.java培训.期待与您交流! ---------- 多线程1.进程: 正在运行的程序所占有的内存空间,叫做进程. 线程: 一个应用程序中的子程序,对于CPU,子程序可以有一条独立的执行路径,称为线程. 线程特点:依靠一个应用程序,对于其他子程序,独立被CPU执行的2.多线程的好处: 充分利用CPU的资源,程序的同时运行,提高效率3.java中线程创建的两种方法: 第一种: 定义类继承Thread class extends Thread 重写Thread中的r

黑马程序员_ 利用oc的协议实现代理模式

先说下代理模式是什么吧 定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象 而代理对象可以在客户端和目标对象之间起到中介的作用. 在看过李明杰老师的课程后,我对代理模式有了最初步的理解,虽然还很浅显 但是也明白了代理模式的 一些作用跟用法.首先使用代理模式可以降低耦合度.大大的增强了代码的弹性. 举个例子,小明想看电影,但是没时间买票 于是就拜托小强去买票 最简单的方式就是 建立一个person类(小明) 一个agent类(代理类) ag