黑马程序员---java高新技术之枚举

------- android培训java培训、期待与您交流! ----------

 

枚举

JDK1.5引入了新的类型——枚举。

为什么要有枚举:

问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday=0;

枚举就是要让某个类型的变量的取值只能为固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

 

用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举的功能。

私有的构造方法

每个元素分别用一个公有的静态成员变量表示

可以有若干个公有的方法或抽象方法,例如,要提供nextDay方法必须是抽象的。

public abstract class WeekDay1 {

       privateWeekDay1(){}//私有的构造方法

       //公有的静态成员变量,父类的引用指向具体的子类对象

       publicfinal static WeekDay1 SUN = new WeekDay1(){//内部类,并且是WeekDay1的子类

                     //实现WeekDay1中的抽象方法

                     publicWeekDay1 nextDay() {

                     returnMON;

              }

       };

       //公有的静态成员变量,父类的引用指向具体的子类对象

       publicfinal static WeekDay1 MON = new WeekDay1(){//内部类,并且是WeekDay1的子类

                     //实现WeekDay1中的抽象方法

                     publicWeekDay1 nextDay() {

                     returnSUN;

              }

       };   

       //实现WeekDay1中的抽象方法

       publicabstract WeekDay1 nextDay();//定义抽象方法

      

      

}


 

枚举的应用

场景1:比较复杂的枚举事例:

enum WeekDay{

    SUN {//内部类,继承WeekDay并实现getNetday抽象方法

       @Override

       WeekDay getNetday() {

           //TODO Auto-generatedmethod stub

           returnthis.MON;

       }

    },MON(1) {//创建该枚举实例时会调用带参数的构造函数,对其进行初始化

       @Override

       WeekDay getNetday() {

           //TODO Auto-generatedmethod stub

           returnthis.SAT;

       }

    },SAT {

       @Override

       WeekDay getNetday() {

           //TODO Auto-generatedmethod stub

           returnthis.SUN;

       }

    };

    private WeekDay(){}//私有的无参构造函数

    private WeekDay(int day){}//私有的有参构造函数

   

    abstract WeekDay getNetday();//枚举中定义一个抽象方法,具体由子类去实现

}

 

场景2:当枚举中的元素只有一个时,可以当作单例模式来使用

enum WeekDay{

    SUN;

    private WeekDay(){

       System.out.println();

}//私有的无参构造函数

   

}


1、 在JDK1.5 之前,我们定义常量都是: publicstaticfianl,有了枚举,我们可以定义一个有意义的枚举,元素当作常量来使用,并且是一个集合,表示的意义也就更多,枚举还提供了比常量更多的方法。

 

//定义一个最简单的枚举,元素有 MON,SUM,THU,

public enum Weekday {  

 MON,SUM,THU//元素当作常量来使用,通过Weekday.元素名的方式来获取元素,元素是指向本枚举实例的引用

}  

 

2、  使用枚举,能让我们的代码可读性更强。由于枚举是我们主观意识定义的,用来表示生活中的一些集合体,因此枚举本身具备很强的可读性。

enum Signal {

//用枚举来表示交通灯,GREEN表示绿灯, YELLOW表示红灯, RED表示绿灯

    GREEN, YELLOW, RED

}

public class TrafficLight {

    Signal color = Signal.RED;// color表示当前交通灯的颜色

    public void change() {

       //结合switch语句,操作起来更加方便

       switch (color) {

       case RED:

           color = Signal.GREEN;//红灯转绿灯

           break;

       case YELLOW:

           color = Signal.RED;//黄灯转红灯

           break;

       case GREEN:

           color = Signal.YELLOW;//绿灯转黄灯

           break;

       }

    }

}


 

3、在枚举中定义自定义方法,并且必须在枚举实例序列的最后添加分号和定义在枚举实例后面。

publicenumColor {

    RED("红色", 1), GREEN("绿色", 2),BLANK("白色", 3),YELLO("黄色", 4);

    //成员变量

    private Stringname;

    privateintindex;

    //构造方法

    private Color(String name,int index) {

       this.name = name;

       this.index = index;

    }

    //普通方法

    publicstatic String getName(int index) {

       for (Color c : Color.values()) {

           if (c.getIndex() == index) {

              return c.name;

           }

       }

       returnnull;

    }

    // get set方法

    public String getName() {

       returnname;

    }

    publicvoid setName(String name) {

       this.name = name;

    }

    publicint getIndex() {

       returnindex;

    }

    publicvoid setIndex(int index) {

       this.index = index;

    }

}

 

4、  覆盖枚举toString方法。

publicenumColor {

    RED,GREEN,YELLO;

      

    //覆盖方法

    @Override

    public String toString() {

       returnthis.index+"_"+this.name;

    }

}

 

5、  实现接口

publicinterfaceBehaviour {

    void print();

    String getInfo();

}

publicenumColorimplements Behaviour{

    RED("红色", 1), GREEN("绿色", 2),BLANK("白色", 3),YELLO("黄色", 4);

    //成员变量

    private Stringname;

    privateintindex;

    //构造方法

    private Color(String name,int index) {

       this.name = name;

       this.index = index;

    }

//接口方法

    @Override

    public String getInfo() {

       returnthis.name;

    }

    //接口方法

    @Override

    publicvoid print() {

       System.out.println(this.index+":"+this.name);

    }

}


数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值