Enum 枚举 视频学习

来源:互联网 发布:node v6.11.3 x64.msi 编辑:程序博客网 时间:2024/04/29 21:59

/*                                              enum 

                     感觉不好懂  应该是相关的知识没有掌握好.

今天又看了一遍Enum的视频,知识理解的更清晰

基础视频 好久没有复习了,看来基础的知识不用遗忘的很快.纠结了过后,回顾视频 才搞清楚!!

抽象的类,残缺的类,不能实例化

抽象方法   只能通过 子类 来实现,父类对象不能实现该抽象方法.

 * 1,为什么要有枚举
 * 枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,
 * 否则编译器就会报错.枚举可以让编译器在编译时就可以控制源程序中填写的
 * 非法值,普通变量的方式在开发阶段无法实现这个目标.
 * 2,用普通类如何实现枚举功能,定义一个WeekDay的类模拟枚举功能
 * 私有的构造方法
 * 每个元素分别用一个共有的静态成员变量表示
 * 可以有若干公有方法或抽象方法,例如,要提供nextDay方法必须是抽象的.
 * 采用枚举方法定义nextDay就将大量的if else语句转移成了一个个独立的类.??!
 * 3,枚举的资本应用
 * 总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,
 * 例如可以调用WeedDay.SUN.getClass().getName和WeekDay.class.getName().
 * 4,枚举只有一个成员时,就可以作为一种单例的实现方式.
 */

Java 代码包括一下两个类:class EnumTest,class WeekDay1

java代码1:

package cn.itcast.day1;

import java.util.Date;

public class EnumTest {

 public static void main(String[] args) {
  WeekDay1 weekDay = WeekDay1.MON;
  System.out.println(weekDay.nextDay());//就是打印weekDay的toString方法.
  
  WeekDay weekday2 = WeekDay.FRI;
  System.out.println(weekday2);
  System.out.println(weekday2.name());
  System.out.println(weekday2.ordinal());//排行第五
  System.out.println(WeekDay.valueOf("SUN"));//打印对象
  System.out.println(WeekDay.values().length);
  //把枚举转换成一个数组  可以对枚举进行数组的操作.遍历...
  
  new Date(300){};//之类的构造方法 调用父类有参数的构造方法

 }
 
 public enum WeekDay{
  
  SUN(1),MON(),TUE,WED,THU,FRI,SAT;//排在最前面  后面的值决定选择哪个构造方法
  private WeekDay(){System.out.println("first");}
  private WeekDay(int day){System.out.println("second");}
 }
 
 public enum TrafficLamp{
  //匿名类  交通灯类TrafficLamp 有三个子类 RED ,GREEN ,YELLOW
  //new 子类的实例对象 调用父类有参数的构造方法
  //每个元素分别是由枚举类的子类来生成的实例对象,
  //这些子类采用类似内部类的的方式进行定义.
  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

package cn.itcast.day1;

public abstract class WeekDay1 {
 
 private WeekDay1(){}
 
 public final static WeekDay1 SUN = new WeekDay1(){

  public WeekDay1 nextDay() {
   // TODO Auto-generated method stub
   return MON;
  }
 };

 public final static WeekDay1 MON = new WeekDay1(){

  public WeekDay1 nextDay() {
   // TODO Auto-generated method stub
   return SUN;
  }
 };
 
 //用他的子类创建是实例对象    定义了一个weekday的子类
 public abstract WeekDay1 nextDay();
 
// public final static WeekDay SUN = new WeekDay();  对象类型的
// public void nextDay(){
//  if(this ==SUN)){
//   return MON;
//  }else{
//   return SUN;
//  }
// }
 
 //不能是静态方法
// public WeekDay nextDay(){
//  if(this == SUN){
//   return MON;
//  }else
//   return SUN;
// }
 
 public String toString(){
  return this==SUN?"SUN":"MON";
 }
}