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

来源:http://www.cnblogs.com/liuzhen1995/archive/2016/09/05/5843864.html
-Advertisement-
Play Games

1、泛型 與面向對象的多態性相類似,應用泛型可以提高程式的復用性。與多態性不同的是,應用泛型可以減少數據的類型轉換,從而提高代碼的運行效率。泛型實際上是通過給類或介面增加類型參數實現的。不帶泛型的類的定義格式是: 【類型修飾詞列表】 class 類名 【extends 父類名】 【implement ...


1、泛型

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

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

{

    類體

}

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

  類名 <類型參數>

  或者是

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

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

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

  (1)類型參數標識符

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

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

     下麵來看一個有關第三種形式的實例:

//定義類J_C1
class  J_C1
{
    public void mb_methodA()
    {
          System.out.print("A");
    }

}

//定義介面J_C2
interface  J_C2
{
    public void mb_methodB();
}

//定義類J_C3,其繼承J_C1類,實現介面J_C2
class  J_C3  extends  J_C1  implements  J_C2
{
    public void mb_methodB()
    {
         System.out.print("B");
    }
}

//定義J_T類,其繼承類J_C1和介面J_C2
class  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_C1J_C2的所有能力。因此,可以用類J_C3當作類J_T的類型變數T的實際類型,例如:類型J_T<J_C3>

 

2、枚舉

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

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

   {

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

   }

  其中,“【】”表示枚舉類型修飾詞列表是可選項;枚舉類型修飾詞列表用來說明所定義的枚舉類型的屬性,可以包含0個、1個或多個枚舉類型修飾詞。如果包含多個枚舉類型修飾詞沒,則在相鄰的枚舉類型修飾詞之間採用空格分隔開。枚舉類型修飾詞可以是public等,但不能是protectedprivateabstract。如果枚舉類型修飾詞含有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()均返回字元串“春季”

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一個程式猿在夢中解決的 Bug 沒有人是不做夢的,在所有夢的排行中,白日夢最令人傷感。不知道身為程式猿的大家,有沒有睡了一覺,然後在夢中把睡之前代碼中怎麼也搞不定的 Bug 給解決的經歷?反正我是有過。 什麼是 AOP ? AOP 為 Aspect Oriented Programming 的縮寫, ...
  • 一、概述 WeakHashMap是Map的一種,根據其類的命令可以知道,它結合了WeakReference和HashMap的兩種特點,從而構造出了一種Key可以自動回收的Map。 前面我們已經介紹了WeakReference的特點及實現原理,以及HashMap的實現原理,所以我們本文重點介紹Weak ...
  • C++混合編程輔助工具, 方便將C++功能導出到腳本語言如Lua,Python中使用 ...
  • B - 大還是小? Time Limit:5000MS Memory Limit:65535KB 64bit IO Format: B - 大還是小? Description 輸入兩個實數,判斷第一個數大,第二個數大還是一樣大。每個數的格式為: [整數部分].[小數部分] 簡單起見,整數部分和小數部 ...
  • 繼續收集python3編碼問題相關資料 資料來源 鵬程的新浪博客(轉載)http://blog.sina.com.cn/s/blog_6d7cf9e50102vo90.html 這篇鵬程老師寫的關於python3的編碼的博客寫的特別的清楚,直接就摘入下來。供自己作為參考。 1.從位元組說起: 一個位元組 ...
  • 一.安裝之前先得知道怎麼下載吧: 一般網上找到的資料是到這裡就GG了的 --> http://spring.io/tools/sts/all 很明顯這點版本是不夠我們需要的,假如我們的eclipse是4.4.1怎麼辦.那麼奇淫技巧來了,我們自己拼接下載地址,點擊 進入我們需要的所有sts的版本,選擇 ...
  • Java有四種訪問許可權, 其中三種有訪問許可權修飾符,分別為private,public和protected,還有一種不帶任何修飾符。 下麵用表格的形式來展示四種訪問許可權之間的異同點,這樣會更加形象。表格如下所示: 同一個類 同一個包 不同包的子類 不同包的非子類 Private √ Default ...
  • 周日沒怎麼休息好,周一一天都迷迷糊糊的,不過還算是幹了不少的活。 總結一下,大致有以下幾點內容: 1 使用poi以及mysql jdbc實現了一個複雜excel的導入 2 基於工程原有的代碼,書寫spring mvc的業務代碼以及測試用例 使用POI以及jdbc POI是用於處理excel文件很常用 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...