黑马程序员Java培训和Android培训:枚举

来源:互联网 发布:数据分析方法 编辑:程序博客网 时间:2024/04/29 06:01
 

静态导入import static

可变参数

public int add(int i,int...args)

{

       int sum;

       for(i=0;i<args.length;i++)

       {

              sum+=arg[i];

       }

       return sum;

}

 

把上面的For循环改为增强For循环的话 

 

public int add(int i,int...args)

{

       int sum;

       for(int arg:args)

       {

              sum+=arg;;

       }

       return sum;

}

 

 

自动装箱和拆箱                 

装箱: Interger  number=12;

装箱的整数在 -128~127之内  那么2个interger相等

如果超出了这个范围  那么!=

享元模式flyweight

 

 

 

模拟枚举的原理

构造出来的枚举的成员都是对象类型的值

采用抽象方法定义nextDay就将大量的if else语句转移成了一个个独立的类

 

package Lessson;

 

public class EnumTest {

 

    public static void main(String[] args) {

       WeekDay wd=WeekDay.Sun;

       System.out.println(wd.nextDay());

    }

 

}

 

package Lessson;

 

public abstract class WeekDay {

    private WeekDay(){}

 public final static WeekDay Sun=new WeekDay(){

     public  WeekDay nextDay(){return Mon;}

 };

 public final static WeekDay Mon=new WeekDay(){

     public  WeekDay nextDay(){return Sun;}

 };

 public abstract WeekDay nextDay();

/* public WeekDay nextDay(){

     if(this==Sun)

        return Mon;

     else

        return Sun;

     

 }*/

 public String toString()

 {

     return this==Sun? "Sun":"Mon";

 }

 }

 

 枚举的构造方法 必须方法枚举的静态变量之后,而且枚举的构造方法必须是私有的

public enum WeekDay{

    mon(1),tu,wen,thu,fri,sat,sun;

    private WeekDay(){

       System.out.println("用的是第一种构造方法");

    }

    private WeekDay(int day){

       System.out.println("用的是第二种构造方法");

    }

   

    }

}

 

实现带有抽象方法的枚举   (抽象类不需要body)

其中包含了内部类的知识:类的方法返回的类型可以是自己的类型,类里面可以定义静态常量,常量指向的结果就是自己这个类型的实例对象

枚举只有一个成员时,就可以作为一种单例的实现方式

 

package Lessson;

 

public class Enum2 {

    public static void main(String[] args) {

       TrafficLight tr=TrafficLight.RED;

       System.out.println(tr.nextLight());

      

    }

    public enum TrafficLight

    {

       RED(30)

       {

           public  TrafficLight nextLight ()

       {

           return GREEN;

       }

          

       }

       ,

       GREEN(45)

       {

           public  TrafficLight nextLight ()

              {

                  return YELLOW;

              }

       }

       ,

       YELLOW(5)

       {

            public  TrafficLight nextLight ()

              {

                  return RED;

              }

       }

       ;

       public abstract TrafficLight nextLight ();

       int time;

       private TrafficLight(int time)

       {

           this.time=time;

       }

    }

 

}

原创粉丝点击