Java基礎知識筆記(二:泛型和枚舉),java基礎知識

來源:互聯網
上載者:User

Java基礎知識筆記(二:泛型和枚舉),java基礎知識
1、泛型

  與物件導向的多態性相類似,應用泛型可以提高程式的複用性。與多態性不同的是,應用泛型可以減少資料的類型轉換,從而提高代碼的運行效率。泛型實際上是通過給類或介面增加型別參數實現的。不帶泛型的類的定義格式是:

【類型修飾詞列表】 class 類名 【extends 父類名】 【implements 介面名稱列表】

{

    類體

}

  如果需要將上面的類定義格式改為具有泛型特點的類定義格式,則只需要將其中緊接在關鍵字class之後的類名修改為:

  類名 <型別參數>

  或者是

  類名 <型別參數1,型別參數2,型別參數3,......,型別參數n>

  前者適用於只有1個型別參數;後者適用於多個型別參數,在相鄰參數之間採用逗號隔開。上面的方法同樣適用於介面,從而將不帶泛型的介面定義格式修改為具有泛型特點的介面定義格式。

  型別參數的定義格式可以採用下面3種形式的任何一種:

  (1)型別參數標識符

  (2)型別參數標識符 extends 父類型

  (3)型別參數標識符 extends 父類型1 & 父類型2 & 父類型3 &......&父類型n

     下面來看一個有關第三種形式的執行個體:

//定義類J_C1class  J_C1{    public void mb_methodA()    {          System.out.print("A");    }}//定義介面J_C2interface  J_C2{    public void mb_methodB();}//定義類J_C3,其繼承J_C1類,實現介面J_C2class  J_C3  extends  J_C1  implements  J_C2{    public void mb_methodB()    {         System.out.print("B");    }}//定義J_T類,其繼承類J_C1和介面J_C2class  J_T  <T extends J_C1 & J_C2>{    public void mb_method(T t)    {         t.mb_methodA();         t.mb_methodB();    }}//實際調用J_T類public  class  J_Genericity{    public static void main(String args[])    {          J_T<J_T3>  a = new J_T<J_T3>();          a.mb_methodT(new J_C3());    }}

     上述代碼最後執行的結果為:AB

     在類J_T的類體中,如果某個變數的類型為類型T,則可以通過該變數調用類J_C1的成員方法或介面J_C2的成員方法。在上面的例子中,因為類J_C3實現了介面J_C2,並且是類J_C1的子類,所以類J_C3具有類型J_C1和J_C2的所有能力。因此,可以用類J_C3當作類J_T的類型變數T的實際類型,例如:類型J_T<J_C3>。

 

2、 枚舉

  建立枚舉類型的主要目的是為了定義一些枚舉常量。枚舉的基本定義格式是:

 【枚舉類型修飾詞列表】 enum 枚舉類型標識符

   {

         枚舉常量1,枚舉常量2,......,枚舉常量n

   }

  其中,“【】”表示枚舉類型修飾詞列表是可選項;枚舉類型修飾詞列表用來說明所定義的枚舉類型的屬性,可以包含0個、1個或多個枚舉類型修飾詞。如果包含多個枚舉類型修飾詞沒,則在相鄰的枚舉類型修飾詞之間採用空格分隔開。枚舉類型修飾詞可以是public等,但不能是protected、private、abstract。如果枚舉類型修飾詞含有public,則要求該枚舉定義所在的檔案名稱首碼與枚舉類型標識符指定的名稱相同,並且以“.java”作為尾碼。而且在該檔案中不能含有其他屬性為public的類、介面或枚舉。每個Java來源程式檔案含有多個類、介面或枚舉,但其中屬性為public的只能有0個或者1個。枚舉類型修飾詞public表明該枚舉能夠被各個軟體包的所有類或介面訪問。如果在枚舉類型修飾詞中不含public,則表明該枚舉類型的封裝性為預設,只能在同一個包內部使用。枚舉類型標識符以及枚舉常量1、枚舉常量2、......、枚舉常量n定義了一些枚舉常量。

  枚舉類型變數簡稱為枚舉變數,其定義格式有兩種,分別是:

  枚舉類型標識符  枚舉變數;

  枚舉類型標識符  枚舉變數1,枚舉變數2,......,枚舉變數n;

  例如,以下定義了四個枚舉常量:

Enum  E_SEASON

{

    春季,夏季,秋季,冬季

} //枚舉E_SEASON結束

  那麼該如何定義枚舉變數呢?可以參照上述枚舉變數兩種定義格式,具體如下:

    E_SEASON  s;

    E_SEASON  s1,s2,s3,......,sn;

  除了以上兩種方式定期枚舉變數之外,還可以定義枚舉陣列變數,其定義格式與其它類型陣列變數定義格式相同。例如:

    E_SEASON  [] s;

  除此之外,還要注意的是,對於枚舉類型,不能通過new運算子建立執行個體對象。可以直接通過枚舉類型標識符訪問枚舉常量。例如:

    E_SEASON  s = E_SEASON.春季;

  此外定義的枚舉變數也可以訪問枚舉常量,例如:

    s.夏季 ==  E_SEASON.夏季;

  最後,需要注意的是使用兩個成員方法:

   (1)public String name()

   (2)Public String toString()

     這兩個方法的功能是相同的,都是返回枚舉常量所對應的字串。例如,假設s變數已經被賦值為“春季”,那麼調用方法結果:

     S.name()和E_SEASON.春季.toString()均返回字串“春季”

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.