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小蝎 閱讀(2058) 評論(0)  編輯  收藏 所屬分類: java

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

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 吕梁市| 尉犁县| 淳化县| 庄浪县| 苗栗县| 贺兰县| 灵璧县| 应城市| 太和县| 永兴县| 盖州市| 松溪县| 平舆县| 双桥区| 广河县| 仁布县| 长寿区| 咸宁市| 弥勒县| 濮阳市| 广饶县| 平陆县| 镇安县| 眉山市| 厦门市| 南和县| 合山市| 承德市| 广安市| 吉林市| 桑日县| 长宁区| 洛川县| 维西| 固始县| 邵阳市| 什邡市| 聂拉木县| 西安市| 陇西县| 北辰区|