1 / 223

第 17 章

第 17 章. Java 標準類別庫. 本章提要. 17-1 甚麼是 Java 標準類別庫? 17-2 基本資料類別 17-3 Math 類別 17-4 Java Collection 17-5 綜合演練. 前言.

Download Presentation

第 17 章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第 17 章 Java 標準類別庫

  2. 本章提要 • 17-1 甚麼是 Java 標準類別庫? • 17-2 基本資料類別 • 17-3 Math 類別 • 17-4 Java Collection • 17-5 綜合演練

  3. 前言 • 前幾章開始接觸到 Java 平台提供的各種功能, 像是執行緒、例外處理、串流類別等。這些功能都是內建在 Java 標準類別庫 (Standard Class Library) 中, 或是稱為 Java API (Application Programming Interfaces, 應用程式介面), 只要在程式中使用這些現成的類別及方法, 就可進行複雜的工作, 例如用 BufferedReader 以緩衝式讀取的方式讀取檔案或鍵盤輸入。

  4. 前言 • Java 提供的功能當然不是只有剛剛提到的幾種, 本章將介紹更多實用的 Java API, 方便您撰寫各式各樣的 Java 程式, 利用程式來解決各式各樣的問題。

  5. 17-1 甚麼是 Java 標準類別庫? • 到目前為止, 已學到的大多屬於 Java 程式語言的部份, 包括變數、運算式、流程控制等基本語法要素, 以及物件導向的語法:類別、繼承等等。不過 Java 語言要發揮功能必須有個可供 Java 程式執行的 Java Platform (Java 平台) 環境。 • Java Platform 包含兩大部份: • JVM • Java API

  6. 甚麼是 Java 標準類別庫? • JVM 提供一個讓 Java bytecode 程式執行的環境, 而 Java API 則是一套內含相當多類別、介面定義的集合, 同一種 Java Platform 所提供的 Java API 種類、數量都相同, 所以可稱之為 Java 標準類別庫 (Standard Class Library)。我們也能從 Java 標準類別庫這個 Java 程式設計人員專用的倉庫中, 找到各式各樣的類別來使用, 讓程式發揮不一樣的功能。

  7. 甚麼是 Java 標準類別庫? • Java 標準類別庫中的類別, 已依其屬性適當分成多種不同的套件, 以 J2SE (Java 2 Standard Edition) 這個 Java Platform 為例, 其 Java API 部份提供了如下圖所示的多種套件:

  8. 甚麼是 Java 標準類別庫?

  9. 甚麼是 Java 標準類別庫? • 每個套件名稱也都暗示了其功能及用途, 像是前一章介紹的 java.io 套件就是有關輸入與輸出的類別集合;而圖中的 Security 所指的 java.security 套件, 則是與安全性有關的類別集合。

  10. 甚麼是 Java 標準類別庫? • 在眾多的套件中, 有關圖形使用者介面及繪圖的幾個套件, 例如在上圖可看到的 Swing、AWT、Java 2D 等, 又合稱為 Java Foundation Classes (簡稱JFC)。 • 如圖示, Java API 的內容相當多, 也不是一本入門書籍可介紹得完的, 因此本書只能做重點式的介紹。前一章我們介紹過 java.io 套件中的輸出入類別和介面, 本章則要介紹以下兩個套件中一些實用的類別:

  11. 甚麼是 Java 標準類別庫? • java.lang:顧名思義, 此套件包含的是對 Java 語言最基本的核心類別, 其中包括我們已學過的字串、執行緒、及例外類別, 都屬於此套件。而本章要介紹的則是可讓我們處理數字的 Math 類別, 以及可用來包裝基本資料型別的基本資料類別。

  12. 甚麼是 Java 標準類別庫? • java.util:這個套件有如 Java 程式設計的萬用工具箱, 提供了開發各種程式都可能會用到的輔助性類別, 其中最重要的一群類別就是所謂的 collection 類別, 這群類別包含了可代表、處理多種資料結構的類別, 對撰寫應用程式很有幫助, 因此本章也將介紹如何使用這些 collection 類別。

  13. 查看 Java API 文件 • 當然在整個 Java API 中還有很多功能強大且實用的類別, 也許您會發現有某個套件對解決您的問題更有幫助。 • 若您想認識 Java API 中到底有哪些套件、類別可使用, 建議直接連上昇陽公司的 Java 線上文件網站 (http://java.sun.com/docs/) 一探究竟:

  14. 查看 Java API 文件

  15. 查看 Java API 文件

  16. 查看 Java API 文件

  17. 查看 Java API 文件

  18. 17-2 基本資料類別 • 第 11 章提過, java.lang 中有一組特別的類別, 是專用於以物件的方式包裝 Java 基本資料型別, 所以可稱之為基本資料類別或包裝類別 (type-wrapper class, wrapper class, object wrapper)。為什麼要用物件的方式包裝基本型別呢?

  19. 基本資料類別 • 因為在某些狀況下, 您要處理的雖然是整數、浮點數等資料型別, 但要利用的工具卻只接受物件形式的資料, 此時就要先將基本資料型別包裝成物件再來進行處理, 在 17-4 節要介紹的 Java Collection 就是這類工具的代表性範例。

  20. 基本資料類別 • 此外這些類別也提供許多實用的方法, 讓我們方便進行資料格式的轉換, 例如我們每次從鍵盤取得輸入的字串, 就會呼叫這些方法將字串轉換成所需的格式 (像是 Integer.parseInt() 方法)。本節我們先來進一步認識這些包裝類別, 每個基本資料型別都有其對應的包裝類別, 如下:

  21. 基本資料類別

  22. 基本資料類別 • 除了 Boolean、Character 外, 其它幾個類別都是 Number 這個抽象類別的子類別。而且這幾個用來存放數值的類別, 都有提供一組相似的方法 (例如常用的 parseInt()、parseDouble() 等)。 • 基本資料類別有個重要的特性不可不知:包裝成物件的數值或字元等, 其值是無法改變的。

  23. 基本資料類別 • 一方面是這些類別都沒有提供修改其物件內含值的方法;再者基本資料類別都是 final 類別, 所以我們也不能從其衍生可更改數值的新類別。 • 這樣的設計其實是可以理解的, 畢竟使用基本資料型別的變數已非常方便, 平常不需多費一道工夫將它們包裝成物件來用。 • 以下我們就先來看如何建立包裝類別的物件及取出物件中的資料。

  24. 建構方法 • 建立基本資料類別的物件, 就相當於將基本資料型別的變數值裝到物件中。建立的方法很簡單, 就是直接以變數、字面常數呼叫類別的建構方法, 例如建立一個 Boolean 物件可用如下的程式:

  25. 關於各類別的建構方法 • Character 類別的建構方法只接受字元型別的參數。 • Boolean、Byte、Double、Integer、Long、Short 類別的建構方法, 只接受其對應型別的變數、字面常數或字串為參數。例如上述的例子中, 就用布林變數和字串建立 Boolean 類別的物件。

  26. 關於各類別的建構方法 • Float 除了能用 float 型別和字串為建構方法的參數, 也能直接用 double 型別的變數當參數呼叫建構方法, 不需自行將參數做強制型別轉換。

  27. 取得物件的值 • 當我們將基本資料型別包裝成物件後, 可透過類別所提供的多種方法, 將其值取出使用。這些類別至少都提供一種 XXXValue() 方法可傳回物件的值, 其中 XXX 需代換為基本資料型別的名稱, 例如 Boolean 物件可使用 booleanValue() 方法、Character 物件可使用 charValue() 方法。

  28. 取得物件的值 • 至於各 Number 類別的子類別就較具彈性, 它們的物件可呼叫下列傳回數值型別的方法, 因為這些方法都是繼承自 Number 抽象類別, 這些方法包括:

  29. 取得物件的值 • 使用上列方法時要注意, 對範圍較大的物件 (例如 Double), 取其較小範圍的基本資料型別 (byte), 就可能發生無法表示的情形, 請參考以下範例程式:

  30. 取得物件的值

  31. 取得物件的值

  32. 取得物件的值

  33. 取得物件的值

  34. 取得物件的值 • 第 7、8 行分別建立 Integer、Double 類別物件。 • 第 11、14 行分別以基本資料類別的物件為參數, 呼叫自訂的 showall() 方法進行示範。

  35. 取得物件的值 • 第 17〜25 行自訂的 showall() 方法, 只是單純呼叫各類別的 xxxValue() 方法並輸出結果。此方法宣告的參數為 Number 類別的物件, 所以程式中可用 Integer、Double 類別的物件為參數呼叫之。

  36. 取得物件的值 • 如執行結果所示, 當物件的數值超出取值方法傳回的基本資料型別所能表示的範圍時, 經常會出現不可預期的結果。例如上例中的 123456789 轉成 byte 和 short 時分別變成 21、-13035, 而轉成 float 型別時, 也產生一點誤差變成 1.23456792E8 (相當於 123456792)。

  37. 取得物件的值 • 至於倒數第 4 個輸出的 Infinity, 則是 Java 特別定義的常數, 代表無限大的意思 (因為 5.376543e200 遠超過 float 可表示的範圍), 以下就來認識基本資料類別中所定義的常數值。

  38. 基本資料類別的常數 • 除了 Boolean 類別外, 其它幾個基本資料類別都有定義至少 3 個 static 變數, 用以表示一些常數值。其中最普通的一類常數, 就是表示各基本資料型別的數值範圍 (可表示的最大值及最小值), 以及各型別的大小 (所佔的位元數)。各型別的這 3 個常數值如下表所示:

  39. 基本資料類別的常數

  40. 基本資料類別的常數 • 除此之外, 浮點數的 Float、Double 類別, 分別各有 3 個代表極限值及非數值 (Not-a-Number, NaN) 等特殊值的 static 變數:

  41. 基本資料類別與字串 • 從字串建立類別物件:此類方法和前面介紹的建構方法有點像, 可將一字串轉成數值型的類別物件。但建構方法的字串只能用十進位表示, 而以下要介紹的方法不但可接受以不同數字系統表示的字串, 而且是屬於 static 方法。 • 從類別物件產生字串:各資料類別物件都可呼叫特定方法將其值轉成字串表示。

  42. 基本資料類別與字串 • 將基本資料型別轉成字串:這類是各類別提供的 static 方法, 可用來將各基本資料型別轉成字串表示。 • 將字串轉成基本資料型別:同樣是 static 方法, 而且我們已用過多次, 每次由鍵盤取得輸入時的用的 Integer.parseInt()、Double.parseDouble() 就屬此類。

  43. 從字串建立類別物件 • 除了 Character 類別外, 各基本資料類別至少都提供一個 static 的 valueOf() 方法, 只要以適當格式的字串呼叫之, 即可傳回該類別的物件。例如:

  44. 從字串建立類別物件 • 整數型類別除了有類似上列的 valueOf() 方法, 還有個多重定義的版本可指定此字串所採的數字系統:

  45. 從字串建立類別物件

  46. 從字串建立類別物件

  47. 從字串建立類別物件 • 第 7〜10 行宣告 4 個以不同數字系統表示的數字字串。 • 第 12〜15 行分別呼叫各整數型類別的 valueOf() 方法將字串轉換成數字物件, 並輸出結果。

  48. 從字串建立類別物件 • 使用 valueOf() 方法時要特別注意:如果字串內容不符合數字格式、或是數字超出物件可表示的範圍 (例如在上列程式中將 str16 轉成 Byte 物件), 都會引發 NumberFormatException 例外。

  49. 將類別物件、資料型別轉成字串 • 在第 11 章已提過所有基本資料類別都有實作各自的 toString() 方法, 可將物件轉換成字串表示, 所以我們能在 print()、println() 方法中直接將之輸出, 或者轉成字串來處理。 • 除了將物件轉成字串外, 各數值型的類別也還另外提供一個 static 的 toString() 方法, 可將其對應的基本資料型別變數轉換成字串。

  50. 將類別物件、資料型別轉成字串 • 各類別的 toString() 方法都只能將數值轉成 10 進位制的字串表示, 若想轉成 2 進位、8 進位、16 進位、甚至於其它數字系統等方式來表示, 則可使用只有 Integer、Long 類別才提供的下列方法:

More Related