黑馬程式設計師Java培訓和Android培訓:列舉

打的去看海的豬發表於2011-07-29
 

靜態匯入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;

       }

    }

 

}

相關文章