国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在Eclipse 3.1體驗J2SE 5.0新特性一

2019-11-18 13:00:51
字體:
來源:轉載
供稿:網友

  本文將介紹J2SE 5.0中三個比較重要的特性: 枚舉類型, 注釋類型, 范型, 并在此基礎上介紹在如何在Eclipse 3.1開發環境中開發枚舉類型, 注釋類型和范型應用。
  
  J2SE 5.0 (Tiger)的發布是java語言發展史上的一個重要的里程碑, 是迄今為止在 Java 編程方面所取得的最大進步.
  
  J2SE 5.0提供了很多令人激動的特性.這些特性包括范型(generics)的支持, 枚舉類型(enumeration)的支持, 元數據(metadata)的支持, 自動拆箱(unboxing)/裝箱(autoboxing), 可變個數參數(varargs), 靜態導入(static imports), 以及新的線程架構(Thread framework).
  
  隨著J2SE 5.0的推出, 越來越多的集成開發環境(IDE)支持J2SE 5.0的開發. 聞名的開源Java IDE Eclipse從3.1M4開始支持J2SE 5.0的開發, 目前最新的版本是3.1RC4.
  
  本系列將介紹J2SE 5.0中三個比較重要的特性: 枚舉類型, 注釋類型, 范型, 并在此基礎上介紹在如何在Eclipse 3.1開發環境中開發枚舉類型, 注釋類型和范型應用.本文將介紹枚舉類型.
  
  1. 枚舉類型
  
  1.1枚舉類型簡介
  
  J2SE 5.0 以及之前的JDK有兩種基本方法可以來定義新類型:通過Classes 以及Interface. 對于大部分面向對象編程來說,這兩種方法看起來似乎足夠了.但是在一些非凡情況下,這些方法就不適合.例如,我們想定義一個類型 PRiority, 它只能接受 High, Medium, Low 三種值. 其他任何值都是非法的.J2SE 5.0 以前的JDK是可以構造這種類型的,但是需要做很多工作,有可能會帶來如不安全(類型安全性問題???)等潛在問題,而J2SE 5.0的枚舉類型(Enum) 能避免這些問題.
  
  Eclipse 是JAVA程序員最常用的開發平臺,而Eclipse 3.1提供對J2SE 5.0的支持,它為J2SE 5.0的新功能提供了幫助工具.在對枚舉類型的支持上,它不僅提供了枚舉類型的創建模板,而且為枚舉類型的各種開發錯誤提供錯誤提示及幫助修改.
  
  本文首先介紹枚舉類型的創建基本概念以及如何在Eclipse 3.1平臺上創建枚舉類型,然后我們通過在Eclipse 3.1開發環境中的例子來說明枚舉類型的應用.
  
  1.2 創建枚舉類型
  
  下面的例子顯示了如何創建一個最基本的枚舉類型:
  
  清單 1. 枚舉類型的定義
  
  public enum Priority {High, Medium, Low };
  
  它包括一個要害字enum ,一個新枚舉類型的名字 Priority 以及為Priority定義的一組值.
  
  在Eclipse 3.1平臺上,按照下面步驟來生成枚舉類型:(Eclipse 3.1提供了一個新的枚舉類型創建向導(wizard)以方便用戶創建枚舉類型)
  
  1) File->New->Other, 模板列表顯示出來.
  
  2) 在模板列表上選中 Java->Enum, 點擊 Next 按鈕
  
  3) 按圖 1填寫每一個域 如下:
  
  
圖 1: Eclipse 3.1 枚舉類型創建模板

  
 在Eclipse 3.1體驗J2SE 5.0新特性一(圖一)

  4) 點擊 Finish 按鈕, 生成Priority 的類(定義???), 并聲明Priority 的每一個值,如下圖 2所示:(High, Medium, low從何而來???)
  
  
圖 2: 枚舉類型Priority

  
 在Eclipse 3.1體驗J2SE 5.0新特性一(圖二)

  在創建枚舉類型時,注重幾個重要的概念.
  
  所有創建的枚舉類型都擴展于 java.lang.Enum. Enum 是在J2SE 5.0 里定義的一個新類, 它本身不是枚舉類型.在創建枚舉類型時,必須用enum 要害字,不能直接地定義一個繼續Enum的類來創建一個枚舉類型,盡管所有創建的枚舉類型實際上都是Enum 的子類. 假如直接繼續Enum, compiler 就會報錯(會導致編譯錯誤).如圖3 所示
  
  
圖3. 直接繼續Enum 類

  
 在Eclipse 3.1體驗J2SE 5.0新特性一(圖三)

  枚舉類型里定義的每一個值都是枚舉類型的一個實例,比方說High是Priority的一個實例.枚舉類型又是擴展于Enum. 所以枚舉類型的每一個值聲明時, 缺省時都將映射到Enum(String name, int ordinal) 構造函數中.換句話說,enum Priority {High, Medium, Low } 的實現是調用了下面的Enum 構造函數:
  
  清單2 映射的構造函數調用
  
  new Enum< Priority >("High", 0);
  
  new Enum< Priority >("Medium", 1);
  
  new Enum< Priority >("Low", 2);
  
  每一個創建的枚舉類型都是Enum 的子類,除了上面調用父類 Enum 的構造函數外,枚舉類型可以使用參數為定義一些自己的構造函數.當聲明值時,只需調用此枚舉類型定義的構造函數,而且不必添加 new 要害字.在清單3里, Priority 的一個實例生成,這個實例就是High (38).
  
  清單3.其它構造函數調用
  
  enum Priority {
  
  High (38),
  
  Medium(36.5),
  
  Low (5.2);
  
  double temperature;
  
  Priority (double p)
  
  temperature = p;
  
  }
  
  另外要強調的兩點: 一是這些枚舉類型的構造函數都是私有的.它是不能被其它的類或者其它的枚舉類型調用的. 而且這個私有修飾符是由編譯器自動加的,假如我們定義這些構造函數時,在前面加上public 修飾符, 就會導致編譯錯誤, 如下圖5所示. 二是變量定義必須在枚舉類型值定義之后. 上圖中double temperature 必須在枚舉類型值定義完了(分號表示枚舉類型值定義完了, 如 Low(5.2);) 才能聲明.
  
  
圖4. 枚舉類型的構造函數是私有的

  
 在Eclipse 3.1體驗J2SE 5.0新特性一(圖四)

  在J2SE 5.0以前,當我們實現一個枚舉類時,一般都是把一個整數關聯到此枚舉類的某一個值的名字,出現的問題是同一個整數可以代表不同枚舉類的值. 下面的例子里定義兩個枚舉類 Course and Grade 如下:
  
  清單4.
  
  public class Course {
  
  public static final int EnglishLit    = 1;
  
  public static final int Calculus     = 2;
  
  public static final int MusicTheory   = 3;
  
  public static final int MusicPerformance = 4;
  
  }
  
  public class Grade {
  
  public static final int A = 1;
  
  public static final int B = 2;
  
  public static final int C = 3;
  
  public static final int D = 4;
  
  public static final int F = 5;
  
  public static final int INCOMPLETE = 6;
  
  }
  
  假如開發者誤把student1.assignGrade(Grade.A)寫成student1.assignGrade(Course.EnglishList); 在編譯 階段是不能發現問題的,假如用J2SE 5.0 枚舉類型(enum)可以避免這些問題.
  
  枚舉類型每一個值都是public, static and final的.也就是說,這些值是唯一的而且一旦定義了是不能被重寫或修改.而且盡管在枚舉類型每一個值聲明時沒有出現static要害字, 實際上值都是靜態的, 而且我們不能在值前面加上static, public,final 修飾符,否則就會出現下圖 6的錯誤.
  
  
圖5 枚舉類型值的錯誤聲明

  
 在Eclipse 3.1體驗J2SE 5.0新特性一(圖五)

  枚舉類型都實現了java.lang.Comparable,枚舉類型的值是可以比較排序的,排列順序就是枚舉類型定義這些值的順序.
  
  1.3 枚舉類型的應用
  
  下面各小節介紹了枚舉類型的各種應用.
  
  1.3.1循環(Iteration)
  
  當我們寫程序時,經常碰到對數組或列表里的每一個對象進行處理的情況.在J2SE 5.0以前,假如要在一個數組或列表里進行輪循時,我們的做法比較繁瑣,需要借助java.util.Iterator 類, 如下所示:
  
  清單5:
  
  List priorities = Priority.values().;
  
  for (Iterator iter = priorities.iterator(); iter.hasNext();) {
  
  Priority p = (Priority) iter.next();
  
  process(p);
  
  }
  
  現在我們可以通過J2SE 5.0 的for/in loop和枚舉類型一起使用. 這能使以前花很多時間寫的程序簡單化,如上面清單5的程序可簡化為:
  
  清單6:
  
  for (Priority g: Priority.values()){
  
  process(g);
  
  }
  
  我們把上面的偽代碼寫成程序在Eclipse3.1上運行,如下圖所示,在右下控制平臺視圖里顯示了運行結果.假如看不見控制平臺,點擊Window->Other Views->Console, 控制平臺就會出現在右下角.
  
  
圖6 枚舉類型在循環中的應用

  
 在Eclipse 3.1體驗J2SE 5.0新特性一(圖六)

  我們在使用for/in loop 時要求它的表達式要求必須是數組或者是實現了java.lang.Iterable的集合,而枚舉類型的values()函數返回的就是一個數組.另外循環變量的聲明必須是在loop里, 包括變量類型和變量名.
  
  我們不能在循環里使用一個在循環之外聲明的變量.這和J2SE 5.0以前for loop 里用的循環變量的聲明不同.
  
  1.3.2 轉換(Switch)
  
  我們常用的一種判定語句就是Switch-case 語句. 在Switch 語句中使用枚舉類型,不僅能簡化程序,而且增強了程序的可讀性.
  
  清單8.
  
  Fi

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保靖县| 夹江县| 高密市| 临夏市| 通渭县| 公安县| 苍南县| 抚顺县| 泗阳县| 宜黄县| 东宁县| 双辽市| 东莞市| 诸城市| 佛学| 广平县| 广南县| 龙山县| 阿荣旗| 彩票| 开鲁县| 大田县| 临泉县| 江川县| 杭锦后旗| 潜江市| 普兰县| 类乌齐县| 民和| 黑河市| 屏东市| 佛学| 桂平市| 平舆县| 东光县| 平罗县| 镇赉县| 津市市| 尖扎县| 安龙县| 曲麻莱县|