黑马程序员—(基础加强JDK1.5)—枚举部分
来源:互联网 发布:最好的优化手机软件 编辑:程序博客网 时间:2024/05/22 03:05
有些时候我们为了代码的安全性,会对我们所建立的类的实例对象会有特殊的限制要求,比如红绿灯类,显然我们只能拥有3种颜色,而不是可以任意建立具有各自特色的实例对象,显然我们给改成霓虹灯是不行的。
下面我们来举一个在JDK1.5之前来表示红绿灯例子:
class TrafficLights{//建立交通灯类private String color;//为灯的颜色设立私有属性public void setColor(String color){//为颜色属性传值this.color=color;}public String getColor(){//返回颜色属性return this.color;}public TrafficLights(String color){this.setColor(color);}public static final TrafficLights red=new TrafficLights("红灯");//建立不可更改三种灯颜色public static final TrafficLights yellow=new TrafficLights("黄灯");public static final TrafficLights green=new TrafficLights("绿灯");public static TrafficLights getInstance(int i){//取得灯类,颜色范围固定switch(i){case 1:{return red;}case 2:{return yellow;}case 3:{return green;}default:{return null;}}}}public class Text1{public static void main(String[] args){TrafficLights color1=TrafficLights.red;//通过类名直接取得红灯TrafficLights color2=TrafficLights.getInstance(2);//通过编号取得黄灯System.out.println(color1.getColor()+" "+color2.getColor());//将其颜色属性打印输出}}
以上为一个反映红绿灯部分特性的类(注意看这里不是红绿灯的应用类),主要表现其在建立实例对象的时候的选择限制,比如通过以上条件的限制,我们是建立不出蓝灯的。
简单的介绍下枚举,枚举的实现是通过关键字enum来实现的,通过API可以查到enum是一个属于java.lang包的类,但是它与一般的类有些不同,我们来看看声明枚举类型的格式:
public enum 枚举类名称{
枚举元素1,枚举元素2,枚举元素3……
}
你们是否发现到enum替代了class的位置呢?后面接的才是枚举类名。
下面我们来通过枚举实现上面的代码功能:
enum TrafficLights{//我们建立一个匿名的内部类来调用TrafficLights类的构造方法,在内部实现其下一个灯的返回方法。red(30){public TrafficLights nextLight(){return green;}},green(45){public TrafficLights nextLight(){return yellow;}},yellow(5){public TrafficLights nextLight(){return red;}};private final int time;TrafficLights(int time){//设定构造方法为各个灯亮的时间传值this.time=time;}public abstract TrafficLights nextLight();//定义抽象方法,返回下一个灯public int getTime() {return time;}}public class Text1{//此类在这里不作为实际功能的调用,仅仅是特性的测试public static void main(String[] args){System.out.println(TrafficLights.red.nextLight());System.out.println(TrafficLights.red.getTime());System.out.println(TrafficLights.green.getTime());}}
运行结果:
green
30
45
之前的例子更像是一个带有自身颜色属性的三个灯,而没有体现其交通指挥的作用,而在这个例子中,显然靠谱了一些。在这里,我们没有设定setTime()方法,而是在时间的设定上,给予的final的附加,以配合用实例对象时间属性,就是为了在测试类中,我们将无法修改它,为其作一个限定。由此可见final后的属性如果还没有赋值的话,如:
final int a;//设定被final修饰的变量a,笔者曾经以为这里会有一个为空的默认值,担心之后就不能赋值了,而实际上在这里a并没有被初始化,所以不能被调用的
a=10;//可以接受第一次赋值
a++;//这里就会报错了
大家可以发现上面的最后一段代码虽然篇幅较短,但结构相对复杂了很多,其修改自张孝祥老师的枚举例子,本人也是写不出来的,不过勉强能够理解了,欢迎大家一起交流。
- 黑马程序员—(基础加强JDK1.5)—枚举部分
- 黑马程序员 java基础加强——jdk1.5新特性—枚举
- 【黑马程序员】Java基础加强14:JDK1.5枚举
- 黑马程序员—(基础加强JDK1.5)—反射基础
- 黑马程序员—Java基础加强(枚举)
- 黑马程序员基础加强——JDK1.5的新特性: 自动拆箱和机制 枚举
- 黑马程序员—Java基础加强—(枚举)
- 黑马程序员——java基础加强之枚举
- 黑马程序员基础加强---枚举
- 黑马程序员-基础加强-枚举
- 黑马程序员_基础加强第一天——JDK1.5新特性
- 黑马程序员——基础加强(jdk1.5新特性)
- 黑马程序员——高新技术——枚举,JDK1.5部分新特性
- 黑马程序员——高新技术---枚举及部分JDK1.5新特性
- 黑马程序员——高新技术---枚举及部分JDK1.5新特性
- 黑马程序员——高新技术---枚举及部分JDK1.5新特性
- 黑马程序员--基础加强部分
- Java基础---枚举及部分JDK1.5新特性 (黑马程序员)
- [LeetCode]Permutation I排列
- jsp的内置对象和jsp的动作
- 2014年抓取Google查询结果的方法
- Word Break
- 项目经理应该把30%的时间用在编程上
- 黑马程序员—(基础加强JDK1.5)—枚举部分
- ASP.NET MD5与SHA1加密的几种方法
- sql查询表根据某列排序的任意行语句
- JS判断null、undefined与NaN的方法
- 新站刚建应该怎么样对网站优化,应该掌握哪些seo优化方法
- Something about measure
- IP 对应 网址
- Minimum Path Sum -- LeetCode
- 使用线程的消息队列