第四單元 運算式與流程控制 單元目標 當完成本單元後, 你將能學習到 : 認識 Java 基本資料型態使用基本資料型態與參考資料型態使用 String 類別與 StringBuffer 類別利用 Java 運算子建構算術運算式與邏輯運算式描述轉型 (casting) 與晉升 (promotion)

Similar documents
3.1 num = 3 ch = 'C' 2

Java 程式設計入門

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

Microsoft Word - 投影片ch03

CC213

Excel VBA Excel Visual Basic for Application

<4D F736F F D B0D3B77EC3FEA7DEC3C0C476C1C9A5BFA6A1B8D5C3442DB57BA6A1B35DAD702DBEC7ACEC2E646F6378>

JAVA String常用APi

Chapter 9: Objects and Classes

untitled

投影片 1

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Slide 1

untitled

四川省普通高等学校

Microsoft Word - ACG chapter00c-3ed.docx


The golden pins of the PCI card can be oxidized after months or years

運算子多載 Operator Overloading

Microsoft PowerPoint - chap3

Microsoft PowerPoint - ICP_02_Basic_Data_Type.ppt [相容模式]

概述

FY.DOC

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

Microsoft PowerPoint - OPVB1基本VB.ppt

Microsoft Word - ACL chapter02-5ed.docx

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD

CC213

Microsoft Word - 01.DOC


資料結構之C語言重點複習

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Microsoft PowerPoint - 04-array_pointer.ppt

Microsoft PowerPoint - Chapter3

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

科学计算的语言-FORTRAN95

(京)新登字063号

TC35短信发送程序设计

CU0594.pdf

_汪_文前新ok[3.1].doc

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

CC213

untitled

untitled

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

Microsoft PowerPoint - VB14.ppt

C/C++语言 - C/C++数据

51 C 51 isp 10 C PCB C C C C KEIL

運算子多載 Operator Overloading

PowerPoint 簡報

PowerPoint Presentation

填 写 要 求 1. 以 word 文 档 格 式 如 实 填 写 各 项 2. 表 格 文 本 中 外 文 名 词 第 一 次 出 现 时, 要 写 清 全 称 和 缩 写, 再 次 出 现 时 可 以 使 用 缩 写 3. 本 表 栏 目 未 涵 盖 的 内 容, 需 要 说 明 的, 请 在

Microsoft PowerPoint - Bronson-v3-ch02.ppt [相容模式]

Microsoft Word - ACI chapter00-1ed.docx

C/C++程序设计 - 字符串与格式化输入/输出

Microsoft PowerPoint - Class2.pptx

TwinCAT 1. TwinCAT TwinCAT PLC PLC IEC TwinCAT TwinCAT Masc

C C

新版 明解C++入門編

Microsoft Word - 小心翼翼的二十一點N.doc

概述

10_String

穨文件1

Microsoft Word - ch 校.doc

男人的大腦 女人的大腦

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

第四講 資料型態及變數、常數

AutoCAD 用戶如何使用 ArchiCAD

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

EJB-Programming-4-cn.doc

封面-12

Microsoft PowerPoint - STU_C_Lang_CH13.ppt

前言 人類的歷史, 因 一個簡單的思維 而改變! 1776 Thomas Paine COMMON SENSE

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

標題版面配置

導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式

APA Preliminaries Text Reference 1. Cover Page 2. Title Page 3. Signature Page 4. Advisor s recommendation letter 5. Approval page 6. Copyri

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

ThreeDtunnel.doc

EJB-Programming-3.PDF

(Microsoft PowerPoint - \262\304\244\273\263\271)

書面

17-72c-1

街街街街街街街街


1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

電機工程系認可證照清單 /7/1

Microsoft PowerPoint - 07-overloaded.ppt

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

Microsoft PowerPoint - chap10.ppt

( )... 5 ( ) ( )

Java 程式設計初階 第 5 章:基本輸出入 & 流程控制

Microsoft Word - Chap02.doc

基于ECO的UML模型驱动的数据库应用开发1.doc

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

Microsoft PowerPoint - Class5.pptx

Transcription:

從 Visual Basic 到 Java 完全手冊 昇陽電腦教育訓練中心著

第四單元 運算式與流程控制 單元目標 當完成本單元後, 你將能學習到 : 認識 Java 基本資料型態使用基本資料型態與參考資料型態使用 String 類別與 StringBuffer 類別利用 Java 運算子建構算術運算式與邏輯運算式描述轉型 (casting) 與晉升 (promotion) 的使用原則使用 if switch for while 和 do 敘述句以及 break 和 continue 關鍵字來建立流程控制結構描述常見的 Java 編碼慣例

問題與討論 利用下列問題來幫助學生思考有關本單元的方向與重點 我們並不期望他們能夠知道這些問題的答案, 而是希望能利用這些問題來引起學生們的興趣, 並鼓勵他們能夠學習本單元的內容 之前在撰寫 Visual Basic 程式時, 曾遵循哪些常見的編碼風格與慣例 相關資料 下列參考資料能夠對本單元所討論的主題提供更詳細的說明 Horstmann Cay S. 與 Gary Cornell. Core Java 2, Volume 1: Fundamentals (Fifth Edition). Prentice Hall, 2000. Eckel, Bruce. Thinking In Java (Second Edition). Prentice Hall, 2000. Thinking In Java (Second Edition) 目前已開放免費下載, 其網址為 : http://www.mindview.net/books/tij/ 你也可以從侯捷網站上取得中文版的部份章節 其網址為 : http://www.jjhou.com/ Farrell, Joyce M. Java Programming: Comprehensive. Course Technology, 1999. Gosling, James, Bill Joy, Guy Steele, and Gilad Bracha. The Java Language Specification (Second Edition), 可從下列的網址取得 : http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html. The Java Tutorial 一書中的下列章節 : Trail: Learning the Java Language (see "Language Basics") 其網址為 :http://java.sun.com/docs/books/tutorial/index.html 4-2

運算式與流程控制 Java 資料型態 本章元將介紹 Java 程式語言的基本元素 資料型態幾乎是所有程式語言所不可或缺的元素, 因此你必須熟悉 Java 語言所支援的資料型態 在學習 Java 資料型態的同時, 你也會學到利用 Java 程式語言進行物件導向開發的額外資訊 Java 程式語言定義兩種資料型態 : 基本資料型態 (primitive data type) 參考資料型態 (reference data type) 如同 Visual Basic, 資料型態限制了變數所能容納之值, 以及運算式所能產生的結果, 並決定那些值可進行哪些運算, 以及決定那些運算的行為 資料型態的宣告與初始化 在 Visual Basic 中使用變數之前, 並不需要宣告該變數的資料型態 當你使用一個未曾宣告的變數時,Visual Basic 私底下會將該變數宣告成 Variant 型態 如果使用 Variant 型態, 在存取此變數時,Visual Basic 直譯器會自動判斷此變數所預期的資料型態 在 Visual Basic 中若要使用明確的型態宣告式, 你必須在每個模組 (module) 的頂端引入 Option Explicit 敘述句 你仍然可以將變數宣告成 Variant 型態, 但是利用 Option Explicit 敘述句可以避免因為忘了宣告變數的型態, 而將該變數宣告成 Variant 型態 在 Java 程式語言中, 在使用變數之前, 一定要明確地宣告此變數的型態 除此之外, Java 程式語言不提供類似 Variant 的資料型態 缺少了 Variant 資料型態雖然會限制程式的靈活性, 卻會幫助你減少應用程式中的錯誤 Java 程式語言是個嚴格強調資料型態的語言, 這意味著每一個變數與運算式都具有資料型態 嚴格的型態檢測將會幫助你在執行時期偵測出錯誤 4-3

Visual Basic 並不是嚴格強調資料型態的語言 即使使用了 Option Explicit 敘述句,Visual Basic 仍然支援 Variant 資料型態 然而,Visual Basic 沒有提供強健的資料型態, 因此許多 Visual Basic 程式設計師會避免使用 Variant 型態 要求學生試著解釋為何嚴格的型態檢測可能避免錯誤的發生 如有必要的話, 利用一個假設的情況來說明此觀念 舉例來說, 假設在 Java 程式語言中可以使用隱性的宣告式 若一開始沒有宣告變數 x 的型態, 並將一個整數值指派給此變數 : x = 2 然而, 接下來在浮點運算式中使用變數 x: x = x + 0.5; 在此種情況下, 在執行第一行敘述句時, 隱性的宣告式會將變數 x 的資料型態宣告成 int 在執行第二行敘述句之後, 變數 x 之值將會不正確 因為變數 x 被宣告成 int 型態, 所以運算式所估算的結果將會是 2, 而不是你所預期的 2.5 基本資料型態 Java 語言定義了八種基本資料型態 這八種基本資料型態可歸類成下列四種類型 : 邏輯型態 :boolean 整數型態 :byte short int 和 long 浮點數型態 :double 和 float 文字型態 :char 你也許已經注意到,Java 的基本資料型態與 Visual Basic 資料型態之間具有一項重大差異 : 在文字型態中並沒有出現 String 在 Java 程式語言中,String 並不是基本資料型態 表 4-1 說明了八種基本資料型態以及它們的特性 4-4

運算式與流程控制 表 4-1 Java 基本資料型態 型態 位元數 說明 範圍 數值 boolean 1 無 false true false true char 16 Unicode '\U0000' 到 '\UFFF' 'x' '\unnnn' '\t' '\r' '\n' '\\' '\'' '\"' byte 8 2 的補數 -27 到 27-1 10,012,0x0A short 16 2 的補數 -215 到 215-1 10,012,0x0A int 32 2 的補數 -231 到 231-1 10,012,0x0A long 64 2 的補數 -263 到 263-1 10L,012L,0x0AL float 32 IEEE 754 1.40129846432481707E-45 到 3.40282346638528860E+38 double 64 IEEE 754 4.94065645841246544E-324 到 1.79769313486231570E+308 1.23F 1.23E+4.5F 1.23 1.23D 1.23E+4.5 邏輯資料型態 -boolean 邏輯數值具有兩種狀態 : 開或關 真或偽 以及對或錯 這些數值可利用 boolean 型態來表示 boolean 型態具有兩個字面字數值 :true 與 false: boolean isthere = true; boolean issleeping = false; 如同 Java 所有的字面字與關鍵字,true 與 false 關鍵字為小寫 4-5

Visual Basic 與 Java 程式語言之間具有一點差異必須特別注意, 也就是它們對變數型態轉變的程度不同 舉例來說,Visual Basic 允許你將數字解釋或轉型 (cast) 成布林值 下列的 Visual Basic 敘述句是合法的 : Dim b As Boolean b = 0 ' 現在的 b 等於 false b = -1 ' 所有非零的數值都等於 true 然而, 假如利用 Java 程式語言撰寫與上述等義的敘述句, 卻不合法 Java 程式語言並不允許你將數字轉型成布林值 : boolean b; b = 0; b = -1; // 無法編譯 // 無法編譯 請注意,Visual Basic 說明文件並沒用到 轉型 這個術語 有些 Visual Basic 程式設計師可能會對此術語感到陌生 在算術運算式中,Visual Basic 也會自動將有布林值解釋成數字 舉例來說, 下列的 Visual Basic 敘述句為合法的 : Dim i As Integer, j as Integer i = 1 j = 5 i = i + (j = 5) ' (j = 5) 等於 -1 然而, 假如利用 Java 程式語言撰寫與上述等義的敘述句, 卻不合法 Java 程式語言並不允許你將布林值轉型成數字 : int i, j; i = 1; j = 5; i = i + (j == 5); // 無法編譯 整數資料型態 -byte short int 與 long Java 程式語言具有四種整數型態 :byte short int 和 long Java 程式語言中的所有整數型態都是具有正負號的數字 表 4-2 列出這四種整數型態的大小與範圍 4-6

運算式與流程控制 表 4-2 整數型態的大小與範圍 型態 大小 範圍 byte 8 位元 -2 7 到 2 7-1 short 16 位元 -2 15 到 2 15-1 int 32 位元 -2 31 到 2 31-1 long 64 位元 -2 63 到 2 63-1 Java 程式語言中的 byte 型態具有正負號, 與 Visual Basic 中的無正負號 Byte 型態不同 除此之外,short 型態就等於 Visual Basic 的 Integer 型態, 而 int 型態就等於 Visual Basic 的 Long 型態 在 Visual Basic 中, 利用 &0 來表示八進位數值, 而利用 &H 來表示十六進位數值 在 Java 程式語言中, 利用十進位 八進位 或十六進位符號來表示整數值的方式如下 : 9 這是十進位的 9 077 最前方的零 (0) 指出此數值為八進位數 0xFFFF 最前方的 0x 指出此數值為十六進位數 請注意,Java 程式語言並沒有利用 & 符號來表示八進位數或十六進位數 若在整數字面字的最後加上 L 或 l 字母, 則代表此數值為 long 型態, 否則皆為 int 型態 你可以使用大寫的 L 或是小寫的 l, 不過通常建議你使用大寫的 L, 因為小寫的 l 常常會和數字 1 產生混淆 下列為上述 int 值的 long 版本 : 9L 077L 0xFFFFL 浮點數資料型態 -float 與 double Java 程式語言具有兩種浮點數型態 :float 與 double 表 4-3 列出這兩種浮點數型態的大小與範圍 4-7

表 4-3 浮點數型態的大小與範圍 型態 大小 範圍 float 32 位元 1.40129846432481707E-45 到 3.40282346638528860E+38 double 64 位元 4.94065645841246544E-324 到 1.79769313486231570E+308 如果數字字面字包含小數點或是指數部份 ( 也就是字面 E 或 e), 或是在字面字未端加上字母 F 或 f(float) 或是字母 D 或 d(double), 則此字面字為浮點數值 3.14 此數值為 double 2F 此數值為 float 123.4E+306 此數值為 double 如果要將浮點數字面字宣告成 float 數值, 則需要在字面字未端明確地加上 F 或 f, 否則將會被假設成 double 數值 float f = 10.2; // 編譯時期錯誤 ; // 10.2 為 double 值 float f = 10.2F; // 正確無誤 你不能利用八進位或十六進位符號來表示浮點數值 文字資料型態 -char 單一的字元是利用 char 型態來表示 你必須利用單引號 (' ') 將 char 字面字圍住, 如下列的範圍所示 'a' '!' char 型態類似於 Visual Basic 中的 Byte 型態 但是, 因為 char 型態包含了一個 16 位元的 Unicode 字元, 所以 char 型態為 16 位元 ; 而 Visual Basic 中的 Byte 型態卻只有 8 位元, 因為它採用 ASCII 字元集 4-8

運算式與流程控制 在 Java 程式語言中, 可利用反斜線字元 (\) 將一些特殊字元 ( 例如,tab carriage return 與換行) 以跳脫字元 (escape character) 的型式指派給 char '\t' tab '\r' carriage return '\n' 換行 '\'' 單引號 '\"' 雙引號 '\\' 反斜線 Unicode 字元集 Java 程式語言採用 16 位元的 Unicode 字元集, 而不是 8 位元的 ASCII 字元集 因此, 一個 char 數值將代表一個 16 位元的無正負號 Unicode 字元 採用 16 位元的 Unicode 字元集是為了能夠支援一些需要 16 位元 Unicode 的語言, 例如中文 這是讓 Java 技術能夠跨平台的關鍵部份 若要表示你的工作站或原始碼編輯器所不支援的 Unicode 字元, 則需使用下列的語法, 其中???? 為四位數的十六進位數字 : char c = '\u????'; 在下列的範例中,Unicode 值 00F1 代表西班牙單字 años 中的 ñ : char c = '\u00f1'; System.out.println("a" + c + "os"); 參考資料型態 Java 程式語言提供了參考型態 (reference type), 可供你宣告基本型態以外的變數 如你所知, 參考變數將會參考一個物件 參考變數就如同 Visual Basic 中的物件變數 (object variable) 舉例來說: Account myacct; myacct = new Account(); 4-9

Account anotheracct = new Account(); 就某種意義來說, 因為物件包含了資料, 因此所有的物件都屬於參考資料型態 然而, 參考資料型態 這個術語有時會用來特別地表示一個包含單一基本資料元素的物件 Java 程式語言中的某些參考資料型態在 Visual Basic 中卻是屬於基本型態 舉例來說, 你將會利用 Java 中的參考資料型態來操作下列型態的資料 : 字串 日期與時間 Java 2 API 也提供一些將基本資料型態 包裏 (wrap) 起來的類別, 以便提供額外的功能, 例如將數字轉換成字串 String 類別 Java 程式語言不包含基本的字串資料型態 ; 它只提供單一字元的資料型態 char 若要表示字元串列, 你必須使用 java.lang.string 類別 String 參考型態的第一個字母為大寫, 如同所有的 Java 核心類別 ; 反之,char 基本型態皆為小寫, 如同所有的 Java 關鍵字 雖然 String 是個類別, 但你可以利用下列的語法建立 String String s = "The quick brown fox jumps over the lazy dog."; 在上述的 String 指派範例中, 此指派敘述句就如同基本的字面字指派方式, 而不是使用物件初始化敘述句以及指派敘述句 換句話說, 在指派敘述句的右手邊並沒有看到 new 關鍵字以及 String 類別的建構式 此語法是可以接受的, 因此 Java 編譯器對 String 類別作了特殊處理, 讓它可以套用不同於一般規則的物件初始化方式 此方便的功能是由編譯器所提供, 與 String 類別本身的架構並沒有關係 你只有在某些情況下才能以字面字的方式使用 String 舉例來說, 你可以利用加號 (+) 運算子將兩個 String 物件串接在一起, 但是你不能利用等號 (=) 運算子來比較兩個 String 物件的內容 4-10

運算式與流程控制 強調最後一點 確定學生了解我們無法將所有的字面字語法套用到 String 上 + 與 String.equals 的用法將會在本單元稍後討論 你也可以利用 new 關鍵字與 String 類別的其中一個建構式來建立 String 物件 : String s = new String("The dog was startled."); 字串字面字必須用雙引號 (" ") 圍住 與 char 字面字所使用的單引號比較一下 : char c = 'T'; 使用 String 物件 Visual Basic 提供了數個內建的函式 ( 例如,Mid 與 InStr) 以便簡化字串的操作方式 在 Java 程式語言中, 你可以使用 String 類別中的方法來完成這些功能 String 類別中最常用的方法如下 : boolean equals(string s) 此方法將會以二元的方式比較目前的 String 物件所包含的字串以及 s 所包含的字串, 如果這兩個字串完全相同, 則回傳 true int length() 此方法將回傳字串的長度 此方法類似 Visual Basic 中的 Len 函式 int indexof(string s) int indexof(string s, int start) int indexof(char c) int indexof(char c, int start) 此方法回傳最先出現的指定子字串或指定字元的位置 如果包含了 start 參數, 則會從 start 參數所指定的位置開始搜尋 此方法類似 Visual Basic 中的 InStr 函式 int lastindexof(string s) int lastindexof(string s, int start) 4-11

int lastindexof(char c) int lastindexof(char c, int start) 此方法回傳最後出現的指定子字串或指定字元的位置 如果包含了 start 參數, 則會從 start 參數所指定的位置開始搜尋 此方法類似 Visual Basic 中的 InStr 函式 String substring(int start) String substring(int start, int end) 此方法回傳一個新的 String 物件, 其中包含了位於指定的起始位置與結尾位置之間子字串 如果省略了 end 參數, 則以回傳起始位置以後的所有字元 此方法類似 Visual Basic 中的 Mid 函式 String replace(char c_old, char c_new) 此方法將所有的 c_old 字元取代成 c_new, 並回傳一個新的 String 物件 String touppercase() String tolowercase() 此方法將修改 String 中所有字元的大小寫, 並回傳一個新的 String 物件 此方法類似 Visual Basic 中的 UCase 與 LCase 函式 String trim() 此方法將移除 String 兩端的空白字元, 並回傳一個新的 String 物件 此方法等於 Visual Basic 中的 Trim 函式 上述的六種方法都會回傳一個 String 型態的物件 這些方法並不會實際地修改原先的 String 物件, 而會回傳一個全新的 String 物件 指出 String 類別中所使用的方法重載 StringBuffer 類別 在 Visual Basic 中, 若要從字串中加入或移除字元, 你可以利用下列的運算式, 將結果指派給原先的變數 : 4-12

運算式與流程控制 Dim s As String s = "Hello, World!" s = Left(s, 5) & " again" & Mid(s, 6) 然而, 在 Java 程式語言中,String 是永遠不變的 (immutable) 請看下列的範例程式 : String s = new String("Hello, World!"); s = s.substring(0,5) + " again" + s.substring(6); 在上述範例的第二行中,Java 執行環境實際上會建立一個新的 String 物件, 再將此物件指派給 s 事實上, 此敘述句將會建立四個 String 物件, 因為此串接運算式中的每個運算元也代表一個新的 String 物件 此範例是合法的, 但它卻沒有效率, 因為 Java 執行環境必須建立四個 String 類別的實體, 才能執行此運算 當你需要修改字串物件時 ( 例如, 插入或刪除字元 ), 你應該改用 StringBuffer 類別 底下的範例程式將示範 StringBuffer 類別的用法 : StringBuffer sb = new StringBuffer("Hello, World"); sb.insert(5, " again"); 你通常會利用 StringBuffer 來動態地建立字元資料, 例如從檔案讀取文字資料 當你需要動態地建構或修改字串時, 則應該使用 StringBuffer 類別 當你動態地操作字串時, StringBuffer 類別將能夠提供更好的執行效率, 因為你不會再引起因為建立許多新 String 物件所造成的額外負擔 StringBuffer 類別並不支援 String 類別所提供的許多方法, 例如 indexof 或 trim 有關 StringBuffer 類別的進一步資訊, 請參閱 Java 2 API 說明文件 4-13

使用日期與時間 Java 程式語言利用下列的參考資料型態來操作日期與時間 : java.util.date java.util.gregoriancalendar java.util.timezone 有關這些類別以及它們所提供方法的進一步資訊, 請參閱 Java 2 應用程式介面 (API) 說明文件 你可以只利用 java.util.date 類別來操作日期與時間 然而, 由於國際化的問題,Date 類別中的許多方法已經不再使用 因此, 許多較舊的 Java 應用程式仍然會使用 Date 類別, 但對於利用 Java 2 API 撰寫的應用程式而言, 建議你改用 GregorianCalendar 類別 如果你的進度已超前, 你可以簡略地示範 java.util.gregoriancalendar 類別與 java.util.date 類別的使用方式 參考變數的宣告與初始化 參考型態與基本型態的初始化方式有些差異 當你宣告基本型態的變數時, 就會同時配置此基本資料型態的記憶體空間 float amount; // 配置記憶體中的空間 amount = 46.25F; // 將已配置的記憶體初始化 然而, 當你宣告參考變數時, 並不會為此變數所參考的物件配置記憶體空間 圖 4-1 以及下列的步驟將說明當你宣告與初始化參考變數時所發生的過程 : 4-14

運算式與流程控制 1 acct myacct; myacct 3 myacct = 2 new Account(); myacct 0xffc8a0cd myacct myacct:account amount 0.0F name amount name :Account 0.0F 圖 4-1 參考變數的宣告與初始化 1. 當你宣告參考變數時, 只會配置此參考變數本身的記憶體空間 此記憶體空間記錄一個指向某個物件的參考值 2. 當你利用 new 敘述句建立物件時, 才會配置該物件的記憶體空間 3. 接著利用指派敘述句設定參考變數之值, 讓它參考新的物件 未經初始化的參考變數將會包含 null 值 若企圖利用未初始化參考變 數來存取物件的屬性或方法, 則將會造成錯誤 指派參考變數 請看下列的程式片段, 其中將建立兩個 int 值與兩個 String 物件, 並進行指派與重新指派的動作, 如圖 4-2 所示 4-15

int i = 7; int j = i; Account acct1 = new Account(); Account acct2 = acct1; i 7 j 7 acct1 acct2 0xea4b23a0 0xea4b23a0 Account i = 8; i 8 j 7 acct1 = new Account(); acct1 0xfb3c4a00 acct2 0xea4b23a0 Account Account 圖 4-2 指派參考變數 敘述句 j = i 會將變數 i 之 int 值複製到變數 j 變數 i 與變數 j 為兩個獨立的變數 同樣地, 敘述句 acct1 = acct2 會將變數 acct1 之值複製給變數 acct2, 但是 acct1 之值實際上是個指向 Account 物件的指標 執行 acct1 = acct2 只會複製指標, 而不是物件本身 因此, 在執行 acct1 = acct2 之後, 變數 acct1 與變數 acct2 將會參考同一個物件, 你對 acct1 的屬性所進行的任何改變都將會反映到 acct2 然而, 當然重新指派 acct1 或 acct2 時,Java 虛擬機器將會重新建立一個新的 Account 物件 比較 Java 與 Visual Basic 的資料型態 表 4-4 列出了 Java 的資料型態與相對應的 Visual Basic 資料型態 表 4-4 Java 資料型態與 Visual Basic 資料型態的比較 Java 資料型態 boolean Byte short int long Visual Basic 資料型態 Boolean 沒有對應的資料型態 Integer Long 沒有對應的資料型態 4-16