java 枚舉學(xué)習(xí)--從小程序中學(xué)習(xí)

           

          Java 枚舉類型 解析

          簡介:java中枚舉是一個(gè)類

          用之前我覺得還是要知道應(yīng)該何時(shí)使用:

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

          Java 代碼

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

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

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

          既然枚舉類是class,當(dāng)然在枚舉類中有構(gòu)造器,方法和數(shù)據(jù)域。但是它是特殊的構(gòu)造函數(shù)。(不深入研究,只應(yīng)用)

          枚舉中常見的方法

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

          枚舉類的具體應(yīng)用

          枚舉類可以在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枚舉學(xué)習(xí)心得從小程序出發(fā) ---------------------------

          基本的enum特性

          publicclass Test {

              /**

               * @param args

               */

              enum Shrubbery {

                 GROUND, GRAWLING, HANGING

              }

          /**

           * 枚舉類的基礎(chǔ)知識(shí)

           */

          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()相當(dāng)于tostring()返回枚舉的值

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

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

              }

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

                 // valueof 返回枚舉類中名稱為 s枚舉對(duì)象

                 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()相當(dāng)于tostring()返回枚舉的值

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

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

              }

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

                 // valueof 返回枚舉類中名稱為 s枚舉對(duì)象

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

                 System.out.println(shrub);

              }

          }

          publicstaticvoid main(String[] args) {

              // TODO Auto-generated method stub

          bKOfEmun();//枚舉類的基礎(chǔ)知識(shí)

          }

          }

           

          枚舉中填入方法

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

          構(gòu)造過程如下

          首先 建立枚舉

          publicenum OzWitch {

          WEST,NORTH,EAST,SOUTH

          }

          然后創(chuàng)建描述信息

          publicenum OzWitch {

          WEST,NORTH,EAST,SOUTH;//注意分號(hào)

          private String description;//描述信息

          public String getDescription() {

              returndescription;

          }

          publicstaticvoid main(String[] args) {

             

          }

          }

          創(chuàng)建構(gòu)造器

          publicenum OzWitch {

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

          private String description;//描述信息

          OzWitch(String description) {//注意只能為 private 這里與正常類的構(gòu)造函數(shù)有區(qū)別

              this.description=description;

          }

          public String getDescription() {

              returndescription;

          }

          publicstaticvoid main(String[] args) {

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

                

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

                

              }

          }

          }

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

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

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 色达县| 杭锦后旗| 宝丰县| 兴隆县| 郸城县| 康定县| 江安县| 来安县| 项城市| 平山县| 叶城县| 呼伦贝尔市| 惠来县| 武山县| 定兴县| 左权县| 仲巴县| 奎屯市| 沙田区| 新和县| 罗城| 黔西| 镇安县| 鸡泽县| 扎兰屯市| 东城区| 易门县| 乐至县| 济阳县| 广南县| 长垣县| 沁源县| 宝兴县| 桐柏县| 吉木乃县| 甘洛县| 巴楚县| 抚松县| 浠水县| 富川| 芦山县|