Transcript 課程講義
第2章 Java導論 2-1 傳統程式與Java程式的差異 2-2 Java開發工具 2-3 Java檔案的編譯與執行 2-4 Java程式內容簡介 2-5 Java基本類型 2-6 基本類型的轉型 第2章 Java導論 - 2 2-1 傳統程式與Java程式的差異 程式語言已經十分接近人類的語言,但電腦的作業系統只能 執行機械碼(Machine Code,由0與1組成),所以需要一種 翻譯工具將原始程式碼(Source Code)轉換成為機械碼; 這種轉換過程稱為編譯(Compile),而編譯的工具就稱為 編譯器(Compiler)。但一般程式語言都不具有跨平台能力, 如下圖所示。 第2章 Java導論 - 3 上述一般程式編譯執行的情形非常類似下圖契約翻譯的情形: 第2章 Java導論 - 4 為了達到跨平台的目的, Java編譯器會將原始程式碼(Java檔) 編譯成Bytecode(Class檔,是一種中介文件),Java還多了一 個JVM(Java Virtual Machine),不同平台的JVM可以將Class 檔轉譯成適合該平台執行的機械碼並且執行。參看下圖。 第2章 Java導論 - 5 上述Java程式編譯執行的情形非常類似下圖契約翻譯的情形: 第2章 Java導論 - 6 2-2 Java開發工具 JDK(Java Development Kit,Java開發工具)可分成3大部分: 編譯器:將Java檔編譯成Class檔。 類別庫:Java提供功能強大的類別庫,方便程式設計師使用。 JVM:將Class檔轉譯成適合該平台的機械碼並且執行,如下圖所示。 第2章 Java導論 - 7 如果只是一般使用者要執行Java程式,僅需安裝JRE(Java Runtime Environment)即可。JRE只有JVM與Java類別庫而 少了編譯器的相關功能。 下載JDK及其說明文件(Documentation)或JRE,可連線到 「http://java.sun.com」,並依照下列步驟下載: 步驟1:連線到Java網站首頁 第2章 Java導論 - 8 步驟2:選取JDK 6.0版 第2章 Java導論 - 9 步驟3:選取適用平台 第2章 Java導論 - 10 步驟4:選取下載檔案 第2章 Java導論 - 11 Sun公司依照功能的不同,將Java分成3種版本: Java SE(Standard Edition)就是Java標準版,主要用來開發 一般單機應用程式。 Java EE(Enterprise Edition)就是Java企業版,主要用來開發 伺服端程式。 Java ME(Micro Edition)就是Java微型版,主要用來開發手機 、PDA上的應用程式。 第2章 Java導論 - 12 2-3 Java檔案的編譯與執行 以Windows作業系統為例: JDK安裝的預設路徑應為「C:\Program Files\Java\jdk1.6.0」。 「C:\Program Files\Java\jdk1.6.0\bin」目錄內有 「javac.exe」、「java.exe」2個重要的檔案,分別代表編譯和 執行功能。 先設定命令列的環境變數-Path,這樣無論在哪個目錄下都可以 順利編譯和執行Java檔案。 第2章 Java導論 - 13 環境變數Path的設定步驟如下: 步驟1:控制台視窗/系統圖示 第2章 Java導論 - 14 步驟2:系統內容視窗/環境變數 第2章 Java導論 - 15 步驟3:環境變數視窗/Path系統變數/輸入「javac.exe」所在路徑 第2章 Java導論 - 16 假設有1個Java檔,檔名為「JavaIntro.java」,所在路徑為 「C:\Example\ch01」: 編譯: C:\Example\ch01>javac JavaIntro.java 編譯成功後會產生「JavaIntro.class」檔。 執行: C:\Example\ch01>java JavaIntro 要執行的Class檔,不需要加副檔名。 第2章 Java導論 - 17 2-4 Java程式內容簡介 Java程式內容大致上可分成下列5個部分: 識別字(Identifier)-由程式設計師自訂的名稱。可以用在 類別、方法、變數等名稱上。 值(Literal)-有數字值與文字值2種;例如:「123」、 「”Hello”」。 符號(Symbol)-最常見的就是運算符號。符號對編譯器而 言有特殊意義,所以不可當作識別字。 關鍵字(Keyword)-關鍵字對編譯器而言也具有特殊意義, 所以也不可以當作識別字。 註解:嚴格說來,註解不是程式碼,「//」或「/* */」都是註 解的符號。 第2章 Java導論 - 18 輸出結果 聖母峰有多高? 8848公尺。 範例說明 • 第1~4行、第6行:註解。 • 第5、12行:成對的大括號所包含的範圍被稱作程式區塊(Block)。 • 第7行:main方法是程式的進入點。 • 第8行:以「;」(分號)結尾的即是敘述句(Statement)。 • 第8~10行:「System.out.println()」會將小括號內的值輸出到螢幕上。println()將內容輸出 後會換行;print()則不會換行。 第2章 Java導論 - 19 2-5 Java基本類型 想像自己是加油站工讀生,假設汽油每公升a元,幫一台車加 了b公升的汽油,總共要跟客人收a×b元。你會先將要計算的數 字a與b記在大腦儲存區內,然後才會開始計算,由此可知「要 計算前必先記憶」。參看下圖。 汽油每公升35元, 加了20公升: 35×20 = 700 第2章 Java導論 - 20 電腦同樣會把要計算的值先存入記憶體內,因為a與b的值是變動的, 所以程式設計師必須必須透過資料類型來告訴電腦所需的記憶體空 間,這個動作稱之為宣告(Declare)或稱作定義(Define);如果 再告訴電腦a的值是35,就會將35存入a變數所代表的記憶體空間中, 而完成了值的指派(Assign)。參看下圖。 第2章 Java導論 - 21 Java基本類型共分成整數(Integral)、浮點數(Float Point)、布 林(Boolean)與字元(Character)等4種類型: 整數類型 整數類型又可分成4小類,如下表所示: 類型 佔記憶體空間 範圍 byte 1 byte -27 ~ 27-1 short 2 bytes -215 ~ 215-1 int 4 bytes -231 ~ 231-1 long 8 bytes -263 ~ 263-1 第2章 Java導論 - 22 以byte類型來說(參看下圖),佔記憶體空間1 byte = 8 bits,每個 bit空間都有0與1兩種變化,所以共有28 = 256種變化,正負數各有 27個;負數可能的值介於「-27 ~ -1」,正數則是介於「0 ~ 27-1」 (因為0佔了一個數,所以27要減1)。 第2章 Java導論 - 23 輸出結果 23 1 2 3 4 141 範例說明 • 第3~6行:宣告整數類型的變數。 • 第7行:整數冠上0x代表是16進位整數,所以8d是16進位的數字。 • 第8行:編譯器會將23視為int類型。 第2章 Java導論 - 24 浮點數類型 浮點數類型其實指的就是小數,可分成2小類,如下表所示。 double是預設的浮點數類型。 類型 佔記憶體空間 可儲存的小數位數 範圍 float 4 bytes 7 -3.4*1038 ~ 3.4*1038 double 8 bytes 15 -1.8*10308 ~ 1.8*10308 第2章 Java導論 - 25 輸出結果 4.0 2.0 123456789 1.23456792E8 1.23456789E8 範例說明 • 第3行:f大小寫都可以;如果移除f則編譯器會將2.0當作double類型。 • 第4行:int類型可以精準儲存整數值。 • 第5行:浮點數都會將值以科學記號方式儲存,所以「123456789」會先被轉成 「1.23456789E8」;float類型只能儲存7位小數,所以第8位小數「9」會因四捨五入而進位, 所以得到值為「1.2345679E8」,但最後輸出結果卻為「1.23456792E8」,是因為第8位小數 產生誤差。 • 第6行:值「123456789」沒有超過double類型所能儲存的15位小數,所以輸出不會產生誤差。 第2章 Java導論 - 26 布林類型 布林類型只有true(成立)與false(不成立)這2種變 化。請參看下表: 類型 佔記憶體空間 範圍 boolean 1 byte true或false 第2章 Java導論 - 27 字元類型 字元類型只能儲存1個字,而且必須以單引號(’’) 框住。Java的字元類型屬於Unicode字元。請參看下表: 類型 佔記憶體空間 char 2 bytes 範圍 ‘\u0000’ ~ ‘\uffff’ 字串(String)類型 處理文字時,不太可能只處理一個字元,所以需要使用 String(字串)類型,並使用「" "」(雙引號)框住。 第2章 Java導論 - 28 輸出結果 J 考 74 32771 證 SCJP 6 "SCJP 6" 範例說明 • 第5~6行:會將「'J'」、「'考'」轉成對應的整數值。 • 第7行:透過16進位的數字代碼取得Unicode字元。 • 第9行:使用「\」將第2個、第3個「"」的標示文字功能解除,使其成為單純文字。 第2章 Java導論 - 29 Java跳脫字元(Escape Character): ‘\’’ 取消單引號原來功能,成為單純文字 ‘\"’ 取消雙引號原來功能,成為單純文字 ‘\\’ 取消反斜線原來功能,成為單純文字 ‘\n’ 換行 ‘\t’ 相當於按tab鍵 ‘\b’ 相當於按倒退鍵 ‘\r’ 相當於按return鍵 ‘\f’ 換頁 第2章 Java導論 - 30 2-6 基本類型的轉型 自動轉型也稱作隱含轉型(Implicit casting),通常 發生在資料類型範圍較小者轉成較大者。 強迫轉型也稱作明確轉型(Explicit casting),通常 發生在資料類型範圍較大者轉成較小者。 自動轉型(小到大): int → long → float → double 強迫轉型(大到小): double → float → long → int 第2章 Java導論 - 31 輸出結果 12.1 12 範例說明 • 第5行:i會自動轉型成double類型。 • 第6行:「(int)」代表要強迫轉型成int類型。