java 枚舉學習--從小程序中學習

           

          Java 枚舉類型 解析

          簡介:java中枚舉是一個類

          用之前我覺得還是要知道應該何時使用:

          一條普遍的規律是,任何使用常量的地方,例如目前使用的switch 代碼切換的地方。 如果只是單獨一個值(例如, max min)這類只要把任務留給常量就行。但是如果定義了一組值,而這些值中的任何一個都可以用于特定的數據類型,那么將枚舉用在這個地方最適合不過。

          Java 代碼

          1. public enum Color{   
          2.     RED,BLUE,BLACK,YELLOW,GREEN   
          3. }  

          從這里看到Enum 是一個類。 而這些類都是類庫中enum的子類。

          Java中已有的enum Color 枚舉類。Color c=Color.RED;這些都是public static final

          既然枚舉類是class,當然在枚舉類中有構造器,方法和數據域。但是它是特殊的構造函數。(不深入研究,只應用)

          枚舉中常見的方法

          Ordinal();返回枚舉值在枚舉類種的順序。這個順序根據枚舉值聲明的順序而定。
                           Color.RED.ordinal();  //返回結果:0
                           Color.BLUE.ordinal();  //返回結果:1
          compareTo()方法: Enum實現了java.lang.Comparable接口,因此可以比較象與指定對象的順序。Enum中的compareTo返回的是兩個枚舉值的順序之差。當然,前提是兩個枚舉值必須屬于同一個枚舉類,否則會拋出ClassCastException()異常。(具體可見源代碼)
                           Color.RED.compareTo(Color.BLUE);  //返回結果 -1
          values()方法: 靜態方法,返回一個包含全部枚舉值的數組。
                           Color[] colors=Color.values();
                           for(Color c:colors){
                                  System.out.print(c+",");
                           }//返回結果:RED,BLUE,BLACK YELLOW,GREEN,
          toString()方法: 返回枚舉常量的名稱。
                           Color c=Color.RED;
                           System.out.println(c);//返回結果: RED
          valueOf()方法: 這個方法和toString方法是相對應的,返回帶指定名稱的指定枚舉類型的枚舉常量。
                           Color.valueOf("BLUE");   //返回結果: Color.BLUE
          equals()方法: 比較兩個枚舉類對象的引用。

          枚舉類的具體應用

          枚舉類可以在switch語句中使用

          1. Color color=Color.RED;   
          2. switch(color){   
          3.         case RED: System.out.println("it's red");break;   
          4.         case BLUE: System.out.println("it's blue");break;   
          5.         case BLACK: System.out.println("it's blue");break;   
          6. }  

          -----------------------java枚舉學習心得從小程序出發 ---------------------------

          基本的enum特性

          publicclass Test {

              /**

               * @param args

               */

              enum Shrubbery {

                 GROUND, GRAWLING, HANGING

              }

          /**

           * 枚舉類的基礎知識

           */

          publicstatic void bKOfEmun(){

             

              for (Shrubbery s : Shrubbery.values()) {

                 // ordinal() 返回枚舉中的位置GROUND 0 位置

                 System.out.println(s + "ordinal" + s.ordinal());// 名稱+位置信息

                 // compareto比較枚舉類型按照 ordinal的值比較-1 0 1

                 System.out.print(s.compareTo(Shrubbery.GRAWLING) + " ");

                 // equals == 看枚舉值是否相同

                 System.out.print(s.equals(Shrubbery.GRAWLING) + " ");

                 System.out.println(s == Shrubbery.GRAWLING);

                 // 返回枚舉所在的類的名稱。

                 System.out.println(s.getDeclaringClass());

                 // name()相當于tostring()返回枚舉的值

                 System.out.println(s.name());

                 System.out.println("-----------------------");

              }

              for (String s : "HANGING GRAWLING GROUND".split(" ")) {

                 // valueof 返回枚舉類中名稱為 s枚舉對象

                 Shrubbery shrub = Enum.valueOf(Shrubbery.class, s);

                 System.out.println(shrub);

              }

              for (Shrubbery s : Shrubbery.values()) {

                 // ordinal() 返回枚舉中的位置GROUND 0 位置

                 System.out.println(s + "ordinal" + s.ordinal());// 名稱+位置信息

                 // compareto比較枚舉類型按照 ordinal的值比較-1 0 1

                 System.out.print(s.compareTo(Shrubbery.GRAWLING) + " ");

                 // equals == 看枚舉值是否相同

                 System.out.print(s.equals(Shrubbery.GRAWLING) + " ");

                 System.out.println(s == Shrubbery.GRAWLING);

                 // 返回枚舉所在的類的名稱。

                 System.out.println(s.getDeclaringClass());

                 // name()相當于tostring()返回枚舉的值

                 System.out.println(s.name());

                 System.out.println("-----------------------");

              }

              for (String s : "HANGING GRAWLING GROUND".split(" ")) {

                 // valueof 返回枚舉類中名稱為 s枚舉對象

                 Shrubbery shrub = Enum.valueOf(Shrubbery.class, s);

                 System.out.println(shrub);

              }

          }

          publicstaticvoid main(String[] args) {

              // TODO Auto-generated method stub

          bKOfEmun();//枚舉類的基礎知識

          }

          }

           

          枚舉中填入方法

          一般說來我們希望每個枚舉實例能夠返回對自身的描述,而不僅僅是默認toString()實現,這只能返回枚舉實例的名字。為此我們可以提供一個構造器,專門負責處理這個額外的信息,然后添加一個方法,返回這個描述信息。

          構造過程如下

          首先 建立枚舉

          publicenum OzWitch {

          WEST,NORTH,EAST,SOUTH

          }

          然后創建描述信息

          publicenum OzWitch {

          WEST,NORTH,EAST,SOUTH;//注意分號

          private String description;//描述信息

          public String getDescription() {

              returndescription;

          }

          publicstaticvoid main(String[] args) {

             

          }

          }

          創建構造器

          publicenum OzWitch {

          WEST("1111"),NORTH("2222"),EAST("3333"),SOUTH("4444");//注意分號

          private String description;//描述信息

          OzWitch(String description) {//注意只能為 private 這里與正常類的構造函數有區別

              this.description=description;

          }

          public String getDescription() {

              returndescription;

          }

          publicstaticvoid main(String[] args) {

              for(OzWitch o:OzWitch.values()){

                

                 System.out.println(o.name()+":"+o.getDescription());

                

              }

          }

          }

          覆蓋enum方法:此程序目的在于把枚舉對象的首字母保留大寫,其余小寫

          publicenum SpaceShip {

                 SCOUT,CARGO,TRANSPORT,CRUISER,BATTLESHIP,MOTHERSHIP;

             

                 @Override

                 public String toString() {

                     // TODO Auto-generated method stub

                     String id=name();

                     String lower=name().substring(1).toLowerCase();

                     return id.charAt(0)+lower;

                 }

                 publicstaticvoid main(String[] args) {

                     for(SpaceShip s:SpaceShip.values()){

                       

                        System.out.println(s);

                     }

                 }

          }

          posted on 2011-03-02 20:32 scorpio小蝎 閱讀(2063) 評論(0)  編輯  收藏 所屬分類: java

          <2011年3月>
          272812345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 肇源县| 盱眙县| 扬州市| 永定县| 邵阳县| 永康市| 刚察县| 三原县| 涟水县| 莱阳市| 清远市| 措美县| 航空| 综艺| 崇礼县| 海伦市| 陆河县| 高州市| 新安县| 海盐县| 东至县| 沧州市| 天祝| 阿克陶县| 凤翔县| 定陶县| 延庆县| 蒲江县| 永和县| 柞水县| 玉山县| 青龙| 自治县| 樟树市| 通辽市| 德兴市| 荥经县| 阜康市| 晋州市| 南昌市| 江陵县|