A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我能驾驭住 中级黑马   /  2012-6-7 09:42  /  1389 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package cn.itcast.day1;
public class TrafficEnum {
        public static void main(String[] args) {
                TrafficLamp tral = TrafficLamp.GREEN;
                System.out.println(tral.time);
                System.out.println(tral.NextLamp());

        }
        //定义一个枚举交通灯的例子
        /*1:枚举返回的类型是自己的类型,例如:public abstract TrafficLamp NextLamp()
            NextLamp()抽象方法返回TrafficLamp类型;
          2:可以定义静态常量,结果就是这个类型的实例对象;例如:RED(35)
          3:枚举就是一个特殊的类,如果有一个成员时,就可以作为一个单例的实现方式*/
        public enum TrafficLamp{
                /*Red,Green,Yellow;这里面的每一个元素都是TrafficLamp类的实例对象,
                 * 肯定不能拿着它去NEW了,所以用它的子类去实现...
                 * 则写成这样:Red{},Green{},Yellow{};
                 大白话:RED是一个元素,{这里面是用TrafficLamp类的子类去实现的}*/
                RED(35){
                        public TrafficLamp NextLamp(){
                                return GREEN;
                        }
                },
                GREEN(45){
                        public TrafficLamp NextLamp(){
                                return YELLOW;
                        }       
                },
                YELLOW(5){
                        public TrafficLamp NextLamp(){
                                return RED;
                        }
                };       
                public abstract TrafficLamp NextLamp();
                //NextLamp()定义一个类的抽象方法返回值是TrafficLamp类型,例如人的年龄方法返回还是一个人
                private int time;//每个灯的时间,私有的
                private TrafficLamp (int time){//构造方法(带参数的),私有的;
                        this.time=time;
                       
                }
               
        }
}
2:可以定义静态常量,结果就是这个类型的实例对象;例如:RED(35)
3:枚举就是一个特殊的类,如果有一个成员时,就可以作为一个单例的实现方式*/
这两句话这样理解对吗?单例是?

2 个回复

倒序浏览
本帖最后由 刘克方 于 2012-6-7 10:39 编辑

这样理解是对的:首先:因为枚举的对象都是静态的;其次:只有一个对象的枚举和单例是一样的。单例是指该类只有静态一个对象,不能再创建其他对象,只能共享同一个实例;而只有一个对象的枚举和单例的原理一样
回复 使用道具 举报
枚举就是要让某个类型的变量的取值只能是若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象。
RED(30){...}的意思是匿名内部类重写了抽象方法,并调用了父类的构造方法。
枚举只有一个成员时,就可以作为一种单例的实现方式。

下面说说单例:
单例:解决一个类在内存只存在一个实例对象。
想要保证对象唯一:
1,禁止对该类进行创建对象:也就是将构造函数私有化。
2,外界无法创建对象,只有在类内部创建一个实例对象,并进行私有化。
3,提供方法让外界获取实例对象。

单例设计模式分为两种:
1,懒汉式:类一加载到内存,对象就被创建存在内存中了。
2,饿汉式:类加载进内存后,对象不会被创建,只有调用获取实例对象方法时才会被创建。此方式需要注意的是如果在多线程情况下需要加锁。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马