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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...