Java programing Java programing

Java 程式設計上課教材

Java 程式設計上課教材 > 課程內容 > 第 1 堂課 - 第一隻程式的建立

第 1 堂課 - 第一隻程式的建立

上次更新日期 2018/07/19

Java 是一個很特別的程式語言,不是直接編譯直接執行,卻也不是透過直譯式的腳本程式語言,要運作 Java 必需要透過所謂的 Java Runtime Environment (JRE) 的 JVM 環境來運作~好處是你編譯過一次後,只要你的作業系統有適合的 JRE,那就可以直接拿來跑,而無須重新編譯。這與過去的傳統程式不太相同~ 也因為如此,所以你的 java 程式真可以說成是跨平台的程式語言喔!

不過,在開始之前,我們還是得要了解一下電腦是怎麼運作的,那 JRE 是否為跨平台 (當然不可能!)?JDK 是什麼?以及如何進行 Java 程式的開發? 包括撰寫、編譯、執行等等的動作,這都需要了解之後,才能夠順利開始撰寫程式的。

  • 1.0: 英打練習
  • 1.1: 基礎計算機概論
  • 1.2: Java 基本介紹與 JDK 安裝
  • 1.3: 雲系統的 windows 與作業繳交方式
  • 1.4: 第一隻 java 程式
  • 1.5: 參考資料
  • 1.6: 課後練習

1.0: 英打練習

資訊科技的技術,如果不是老闆,生產力人員 (就是你我) 通常不會只使用手持式裝置,至少會使用到各式鍵盤。因此,打字就非常重要, 好的打字速度帶你上天堂,差的打字速度讓你呆成糖 (蟲的台語,慢吞吞之意)!關於打字練習的重要注意事項請參考第 0 堂課的說明, 同時,請花 10 分鐘完成第 0 堂課的英文打字練習。完成之後,請打開你的 notepad++ 軟體,輸入底下的字串喔!

computer is hardware and software ↵
CPU is central processing unit ↵
byte = 8 * bits ↵
OS is operating system ↵
multiprogramming, multithreading, multiprocessing ↵
computer language including machine language, assembly language, high-level language ↵
compiler transfer source code to binary code ↵
Java applet and Java application ↵
API is Application Program Interface ↵
C:\Program Files\Java\jdk\bin ↵

public class hello { ↵
	public static void man (String args[]) { ↵
		System.out.println ("Hello World!!"); ↵
	} ↵
} ↵

你不需要複製貼上,這單純是要讓你的打字速度變快!所以不要太緊張!練習就對了!沒練習完畢?沒關係,有空繼續練習即可!

1.1: 基礎計算機概論

基本上,電腦是由硬體 (hardware) 與軟體 (software) 所組成的,我們透過操作應用軟體來讓硬體達成我們想要完成的各項任務。 你的電腦能不能跑得動 3D 繪圖軟體?你的電腦如果有點慢,可能造成這個困頓的問題是什麼?操作比較偏向運算功能的程式時, 怎麼挑選較快速的電腦?這都與硬體的基礎知識有關。

一般來說,硬體包括了 5 個主要的基本單元,分別是:

  • 控制單元
  • 算術邏輯單元 (與控制單元整合在中央處理器, CPU 內部)
  • 記憶單元 (通常指主記憶體,硬碟則是輔助記憶體,也算在此單元內)
  • 輸入單元 (鍵盤、滑鼠、觸控螢幕)
  • 輸出單元 (螢幕、印表機)

這五個單元彼此間的關係可以用底下的圖示來簡易的說明:

電腦五大處理單元

所有的程式碼與資料,全部都會被連續的載入到記憶體中,等待載入完成後,根據程式碼的功能,再由 CPU 來進行邏輯與運算功能。 最終產生的資料,又寫回到記憶體當中,然後透過控制單元去處理其他硬體的展示,例如螢幕顯示或印表機輸出等。

由於主記憶體會在關機後全部的資料都遺失,因此就有輔助記憶體,這些輔助記憶體內部的程式碼或資料就不會遺失!這個輔助記憶體可以是硬碟、 光碟、外接式 USB 硬碟、網路資料來源等等。因此,你的系統就可以在開機完成後,透過讀入硬碟內的程式與資料,來開始運作你的系統。

  1. CPU 常見的時脈單位是什麼?他的意義是什麼?(與『工作次數』有關)
  2. 位元 (bit) 與位元組 (byte) 的差異是?
  3. 所謂的電腦五大單元指的是哪五個單元元件?
  4. 電腦五大單元裡面, CPU 內部整合了哪兩個單元?
  5. 目前記憶體的容量主要是什麼單位?
  6. 目前硬碟 (傳統硬碟) 的容量又是什麼單位?
  7. 常見的資料可以存在記憶體與硬碟 (傳統硬碟) 內,請問 (A)哪個速度快 (B)哪個比較穩定可靠?
  • 作業系統

如前所述,電腦硬體的運作過程中,所有的資料都要先寫入記憶體內 (不論是程式碼還是資料),然後再控制 CPU 去讀取運算, 最後將運算結果丟回主記憶體。因此主記憶體的應用就很重要了!那早期的電腦程式很難撰寫,這是因為如果你要完成一件工作,例如你想要計算一個圓的週長,那麼就得要:

  1. 針對 CPU 指令集設計好計算式,並撰寫成系統可以讀取的程式碼,
  2. 根據程式碼的大小,定義出記憶體的位址,
  3. 將程式碼載入到記憶體內,
  4. 開始讓 CPU 計算這個程式碼,
  5. 針對輸出結果寫回到記憶體內,
  6. 將記憶體內的資料印出到螢幕或印表機。

整體來說,可以使用底下的圖示來簡單示意一下,事實上,其實連檔案系統的讀寫 (就是從儲存設備裡面將資料讀入記憶體當中的程序) 也需要程式設計師自己想辦法的!

早期程式語言寫法

這些流程你都必需要自己根據硬體的規範去寫出來...光是想到要對記憶體定址,光是想到要自己將程式碼載入到正確的記憶體中,恐怕就抓狂了! 這些流程裡面最複雜的可能還是硬體的規範~不同的硬體有不同的指令集,因此你要針對不同的電腦硬體來重新設計你的程式碼才行...

後來人們就設計出一組軟體,這組軟體會主動的去計算可用的記憶體,主動的根據你的程式碼大小去規範出記憶體定址,主動的將程式碼從檔案系統當中讀出或寫入, 主動的將程式碼與資料用最佳化排程丟給 CPU 去執行,並將 CPU 的結果主動的寫回到記憶體內,最終主動的將這些結果在螢幕或印表機上面顯示出來。 這組能夠控制與分配硬體資源,並且提供使用者操作或設計軟體的環境,就被稱為『作業系統 (operating system, OS) 』了!

不同的硬體 (例如手機硬體、桌機硬體、大型工作站硬體其實都是不一樣的硬體設備) 會有不同的 CPU 指令集與資源規範, 因此就得要設計出不一樣的作業系統。也就是說,作業系統是與硬體有關系的。舉例來說,windows 可以裝在桌機上,但 windows 不可以裝在手機上。 而在作業系統上面運作的軟體,就跟著作業系統跑。舉例來說,在 windows 上面跑得 MS office 就不能在 Linux 上面跑。相關性有點像底下這樣:

作業系統

一般來說,使用者主要是操作應用程式,然後透過應用程式去呼叫作業系統的功能,最終透過作業系統功能操縱硬體去達成我們使用找想要達成的任務。 那程式設計師呢?就透過作業系統提供的功能,搭配程式語言提供的針對作業系統所設計的編譯器,就能夠設計應用程式了! 所以,現代的程式設計師很幸福!不用去管理系統底層的硬體資源配置問題!

另外,現在的硬體為了加速,通常會在一顆 CPU 封裝裡面放入多個核心,以簡單的想法來說,每個核心就是一個獨立的運算中心。 而為了讓每顆 CPU 核心都能被使用,所以作業系統的 CPU 資源分配就顯得很重要。當然,程式設計也能夠使用多個 CPU 才能夠加速。 常見的 CPU 使用方式如下:

  • 多程式功能 (multiprogramming):就是一般俗稱的多工,單個 CPU 核心可以在不同的軟體程式間運作, 也就是多個軟體可以共享一個核心,感覺像是同時運作的意思。
  • 多執行緒功能 (multithreading):允許單一程式同時間執行多個任務,例如文書編輯器允許使用者同時編輯文字與將資料寫入磁碟中。 此時文書編輯器同時在進行編輯與寫入的動作之意。
  • 多處理器功能 (multiprocessing):或稱為平行處理 (parallel processing),使用兩個以上的 CPU 核心同時處理多個子任務, 再將子任務的執行結果組合起來,以得到完整的任務結果。不過這個任務的完成,需要應用程式的設計也用到 multiprocessing 的寫法才行。

一般來說,我們初學者所撰寫的程式碼,通常是單一任務的功能,稍微複雜一點的也是兩三個任務的運作,因此,只要透過作業系統本身的 multiprogramming 就能夠讓 CPU 去操作運作了。但如果未來你想要讓你的程式碼同時使用到多個 CPU 核心,以加速運算的話,還得要增加學習平行處理的程式撰寫方式與函式庫呼叫才行。 目前作業系統還無法主動提供 multiprocessing 喔!這部份要程式設計師自己設計。

  1. 目前你手邊常見的電腦硬體應該有兩種,電腦與手機就是兩種不同的硬體。請找出這兩種硬體的 CPU 架構各別是什麼?
  2. 現代的作業系統主要提供什麼功能?
  3. 說出 (1)桌機常見的三種作業系統、(2)手機常見的兩種作業系統。
  4. 硬體加速的行為有兩種情況,一種是提昇 CPU 的頻寬,一種是增加多個 CPU 核心數,目前哪種是主流?為什麼?
  • 程式語言

電腦程式或稱為軟體,是一連串告知電腦所需執行任務的指令 (instruction)。

電腦只看得懂電腦的語言,人類只看得懂人類的語言~早期人類為了寫讓電腦可以讀懂的語言,得要自己設計二進位程式 (binary code), 亦即資料裡面只有 0 與 1 的部份。後來由於可以透過所謂的編譯 (compile) 的動作來轉換人類語言成為機器語言,因此後來設計程式就變得比較簡單。 上面提到的指令 (instruction) 其實就是電腦看得懂的 0 與 1 的機器語言。

機器語言:電腦能讀的就是 0 與 1 的機器語言 (machine language),儲存的資料格式為二進位資料 (binary code)。 這種方式來撰寫程式是相當頭疼的!而且只要不同的硬體,就得要使用不同的機器碼,因此不但難寫,也很難重複應用。

組合語言:組合語言 (assembly language) 可以透過簡短的文字集合來處理程式碼,例如可以透過 add 作為加法, 因此透過類似『 add 2, 5, result 』這樣的語法,作為 2+5 的程式運算。不過組合語言是要讓程式撰寫變得簡單,而不是寫給機器看的, 因此最終要透過一個類似翻譯者的組譯器 (assembler) 來將這個文字檔轉成機器語言後,才能夠被系統執行。

組合語言與組譯器

組合語言雖然跟機器碼比較之下,是容易觀察許多,但是與人類的語言還是離的比較遠,因此組合語言算是比較接近機器語言的低階程式語言 (low-level language)。 而且,組合語言的一個指令相當於機器語言內的一個指令,並且撰寫組合語言必需要理解 CPU 的運作,因此撰寫上還是很麻煩。

高階語言:使用人類的表示方法來撰寫的文字檔,所謂的人類的表示方法,例如要算出半徑為 5 公分的圓的圓周長, 我們可以使用類似『 length = 2 * pi * R 』亦即『 length = 2 * 3.1414 * 5 』,最終列印出 length 即可取得結果。不過,同樣的,這是人類看得懂的原始碼 (source code), 不是機器看得懂的,因此,一般我們就得要透過編譯器 (compiler) 將這個原始碼編譯成為機器碼才行。

高階語言與編譯器

不過有另外一派的高階程式語言,可以透過直譯器 (interpreter) 來直接執行喔!那就無須透過編譯。你可以這麼想,直譯器其實就是已經編譯好的各種小程式, 所以你的高階程式語言腳本檔 (文字檔) 就能夠直接呼叫各個小程式去直接執行了。

  • 需要編譯器的語言: C、Fortran、Java ...
  • 可以透過直譯器直接執行的腳本語言: python, PHP, perl, bash ...
  1. 什麼是 source code 與 binary code
  2. 高階程式語言中,直譯語言與編譯語言的差別是什麼?

1.2: Java 基本介紹與 JDK 安裝

Java 最早是由昇陽 (Sun Microsystem) 公司所開發,並在 1995 年正式釋出,原本的目的是在將程式碼安裝於家電的嵌入式晶片中,後來於網際網路的盛行, Java 可以運作於瀏覽器上,這種 java 程式被稱為 applets。不過 Sun 由於在 2010 年被 Oracle 所收購,所以目前 Java 的所有權則在 Oracle 公司上。

  • Java applet, Java application

早期的瀏覽器並沒有什麼可供互動的功能,後來 java 發展起來後,他除了可以運作在各平台的電腦上,也可以透過 java applet (java 小程序) 運作於瀏覽器上。java applet 可以透過 java 程式語言所提供的各種圖形界面來展示,包括按鈕、文字欄位、選項功能等等,讓瀏覽器變得多采多姿, 因此早期許多互動或者是比較漂亮的網頁,大多數得要透過 java applet 來執行。另外,目前 Android 系統中,許多的程式也都是透過 Java 來設計的。也就是說:

  • Java applet:需要嵌入於 HTML 網頁中,在瀏覽器上面運作的 java 程式
  • Java application:可在 JVM(後面會談到) 的環境中獨立運作的 java 程式。
  • Java 語言的規格、開發環境與整合環境

你要如何撰寫 Java 程式語言呢?事實上,Java 程式語言是有規範的,相關的規範得要參考應用程式界面 (Application Program Interface, API) 的功能。 你可以把 API 想成是許多的函式庫,包含了為了開發撰寫 java 程式所預先定義的類別與界面。

那要如何進行 java 的開發呢?這時就得要使用 java 原廠提供的 java 發展工具 (java developer's kit, JDK) !基本上 JDK 有三種版本,分別是:

  • Java Standard Edition (Java SE):適用於開發客戶端的獨立應用程式,或者是 applet 。
  • Java Enterprise Editin (Java EE):用於開發伺服器端的程式
  • Java Micro Edition (Java ME):用於開發手持式裝置的應用程式。

本課程主要著重在客戶端程式開發,因此使用的是 Java SE 版本的 JDK。而 JDK 主要提供的工具有:

  • javac:就是主要的 java 編譯程式
  • java byte code:解譯程式
  • applietviewer applet:執行程式

不過你要注意的是,編譯成功之後若想要執行這個 java application 的話,就得要在 java 可執行環境中!這個可執行環境稱為 JRE (Java runtime environment)。 java 會對每個不同的作業系統提供相對應的 JRE 環境,你經過編譯的 java 程式,只要在任何一個作業系統內的 JRE 環境中,理論上,這隻 java 程式就可以被執行, 而不用重新針對不同作業系統進行編譯。這個 JRE 的環境也被稱為 java 虛擬機器 (Java virtual machine, JVM)。

所以,雖然說 java 程式是跨平台,其實還是得要透過事先在各不同作業系統編譯的 JRE 軟體上面才能執行!也就是說,所有的作業系統, 只要能運作自己的 JRE (JVM) 軟體,那麼同一隻 java 程式就可以在不同的作業系統上面運作的意思!關於更多的 JRE 的說明, 可以參考底下的連結:

上面的連結裡面有個圖示特別有趣,可以簡單的解釋完 JVM 的角色!如下圖所示。每個作業系統裡面都會有各自的 JVM 的環境, 因此 java 廠商必需要針對不同的作業系統提供不同的 JVM 來給對方安裝。安裝完畢之後,該 JVM 的內容就會完全相同! 因此,所有的你自己編譯的程式,就能夠在該 JVM 上面運作了!這個方式與直譯式及編譯式的程式運作不太一樣,還挺有趣的。

JVM 的用途

另外,市面上有不少提供 Java 整合環境 (IDE) 的軟體,不過不太建議初學者使用,單純的將程式編輯器、程式編輯、程式運作分開來操作, 會讓使用者的學習更具有良好的功效!

另外,事實上, JRE 必需要針對不同的作業系統來進行編譯,所以各個作業系統的 JVM 其實是各自編譯成為各自的系統的軟體! 而不是同一個 JVM 都可以放在任何的作業系統上面執行!這個 JVM 與你自己撰寫的 Java 程式可不一樣喔!

  • JDK 的安裝

如上所述,JDK 的版本有三種,我們要安裝的是 Java SE 的標準版本,開發客戶端專用的本版。請前往底下的連結下載最新的版本:

上面的連結中,點下『 JDK 』字樣,在出現的頁面中,就會有不同作業系統的 JDK 軟體了!點選『Accept License Agreement』,然後針對你的作業系統去下載, 我們假設你使用 windows 10 進行各項工作,因此請點選 jdk-xx.x.x_windows-x64_bin.exe,下載完畢就可以安裝囉!

  • 請依據老師在白板上面提示的位置,(應該是在 /download 目錄底下的 vbird/download/ 子目錄中), 直接從檔案總管裡面下載 JDK for windows 的版本,下載完畢之後自行安裝起來。

基本上,安裝就是點兩下,然後持續的下一步而已,最終 JDK 會安裝兩個資料:

  • C:\Program Files\Java\jdk-xx.x.x\:主要就是發展工具!
  • C:\Program Files\Java\jre-xx.x.x\:就是 JVM 的主要軟體!

未來我們會使用簡單的 MSDOS 視窗來進行 java 的編譯與執行,因此,最好能夠讓 MSDOS 可以隨意的使用 javac 這個編譯軟體才好。 這時就得要讓 javac 之類的軟體執行路徑加入到 PATH 這個路徑變數內比較好。處理的方法是:

  • 檔案總管的『本機』上面按下右鍵,選擇『內容』
  • 出現的視窗裡面選擇左側最下方的『進階系統設定』項目
  • 出現的新視窗內,選擇『進階』頁面,該頁面最底部的『環境變數』點下去
  • 找到上面方塊的『 Path 』這個項目,點選後按下『編輯』
  • 在出現的『編輯環境變數』視窗中,點選右側的『瀏覽』按鈕,將 C:\Program Files\Java\jdk-xx.x.x\bin 目錄加到裡面去。
  • 同樣的,在底下的『系統變數』裡面也找到 Path,用上述同樣的方式加入該目錄喔!

上面最後一個步驟的畫面有點像底下這樣:(注意底下的圖示,未來我們在進行各種作業的製作時,如果是在雲端機器上的作業, 請務必要連同黃色箭頭指的位置,亦即是你的學號也得要在圖示中!)

Java 的安裝設定變數

要確認是否能夠順利的運作 javac 這隻程式,請在工具列上面的搜尋 (或開始程式集裡面的搜尋) ,輸入『 cmd 』這個關鍵字, 螢幕上就會出現一個名為『命令提示字元』的程式,點選他執行。在出現的畫面當中輸入『 javac 』之後,應該就會出現一堆資訊! 有點像底下這樣,那就是安裝成功了!

Java 的安裝設定變數

1.3: 雲系統的 windows 與作業繳交方式

為了讓同學們可以持續的練習,因此本課程提供了一個雲虛擬機讓大家來操作利用。雲虛擬機的位置在底下:

請依據老師的說明進行註冊,並等待老師幫你的帳號開通。開通之後請登入系統。登入系統之後請按下『啟動/關閉』按鈕, 出現一個名為『 public - windows 10 』的硬碟,請啟動該硬碟。

請安裝一個名為 virt-viewer 的軟體,透過該軟體提供的『 remote-viewer 』指令, 將上述虛擬機器的網址貼上之後,就可以順利取得操作畫面來練習。

最終,要登入 windows 的帳號密碼請詢問老師 (應該是 dix/mxdxx),直接登入系統即可。未來許多的課程都會在上面完成喔!

  • 使用 MS office word 進行作業製作

如果同學是在學校進行作業,可以直接在有版權的校園內電腦點選 word 軟體進行編輯的行為,之後直接在 word 軟體裡面填上文字資料, 以及貼上相關的圖示即可。如果沒有 MS office word 的正版軟體,則可以使用 Libreoffice 軟體, 請自行下載與安裝完畢之後,啟用 libreoffice ,然後選擇 writer 這個項目,就可以進入類似 MS office 的編輯畫面中了!其他的動作幾乎一模一樣喔!

如果是需要貼圖,如果你的系統有你慣用的圖形編輯器,那就用該軟體即可。如果沒有的話,可以透過小畫家來處理。在搜尋的畫面中輸入『 paint 』就可以呼叫出小畫家。 按下上方工具列裡面的『影像』裡頭的小圖示,將畫面大小調整到比較小的尺寸,然後再貼上你複製的影像資料即可。 複製完畢後,同樣透過該框框當中的『選取』功能,將你要的部份選取起來,最終在 word 或 writer 上面按下貼上,就能夠將畫面補上了。

作業的檔名請取名為『 unit01-學號-姓名.docx 』之類的方式,之後再以 FTP 的方式繳交到 class.vbird.tw 的網站上!請注意, word 檔案的大小不要超過 5MB 的容量,而 class.vbird.tw 上面的你的帳號為你的學號,帳號為全部小寫字元。至於密碼則請自行設定。 這組帳密會讓你用到大二下,所以,請不要忘記自己的帳密了。忘記之後得要找老師重新設定...系統不會幫你保留舊密碼,也就是說, 沒有人知道你曾經設定的密碼為何。

請使用 filezilla client 軟體,安裝完畢後,填寫『 (1)主機名稱 class.vbird.tw (2)你的學號-英文是小寫字元 (3)你自己設定的密碼 』之後, 並且定連結的 port number 為 21 (或是單純的 FTP 協定,未加密),按下連線,就可以連結到 Server 上面。請記得,務必放置到名稱為 java 的目錄後面!

  • 程式碼的繳交方法

程式碼的繳交 (底下會介紹如何製作) 需要有原始碼以及執行過的程式碼 (source code and binary code)。 兩者同樣的使用相同的方式來傳送到 class.vbird.tw 上面!唯一的差別應該就是副檔名而已。此外, 每週上課時,會查看同學們上週的作業,屆時請下載你的作業,然後在課堂上執行給老師看即可。作業可以補交, 補交 60 分,但隔兩週後不可再補交。不交則為 0 分。

1.4: 第一隻 java 程式

如前所述,要達成 java 程式的運作,除了 1.2 小節談到的,需要安裝好 JDK 之外 (JDK 已經包含了可以運作 JVM 的 JRE 了!), 另外就是要撰寫 java 的原始程式碼。撰寫完畢之後,還需要經過編譯,之後才能夠順利的在 MSDOS 環境下運作該程式。在這門課,我們會這樣做:

  1. 透過 notepad++ 撰寫所需要的原始碼內容,注意,副檔名必須是 .java 才行。
  2. 透過 javac 進行編譯的行為,會產生 .exe 檔案
  3. 執行 .exe 檔案。

所以,我們需要安裝一個程式編輯器,這邊我們選擇 notepad++。

  • 程式編輯器

程式編輯器相當多,我們系上常用的是 Jedit 以及 notepad++ 這兩款。鳥哥個人偏好 notepad++。請前往官網下載:

建議下載 32 位元版本,因為 32 位元版本支援的其他外掛比較多!64 位元版本許多外掛預設都不支援。個人建議安裝 Installer 版本, 因為未來升級會比較簡單。

  1. 請下載 notepad++ 軟體 (installer 版本)
  2. 請安裝該版本 (一直下一步就好了)
  3. 安裝完畢之後就可以立即啟動他了!非常簡單!
  • java 編輯的基本語法

編輯 java source code 也很簡單,你可以在檔案總管理面,假設你的帳號名稱為 dic 的話,那麼可以在『 C:\使用者\dic\ 』底下建立一個名為 java 的目錄, 然後未來所有的你建立的檔案通通放在裡面就對了。現在,讓我們打開 notepad++ ,並在該檔案內加入這段文字:

// Hello World
public class hello {
	public static void main (String args[] ) {
		System.out.println ("Hello World!!");
	}
}

原本尚未儲存時,你會發現到上述的文字在 notepad++ 裡面的顏色都沒啥變化。現在,請按下儲存,並且檔名取名為:『 C:\使用者\dic\java\hello.java 』, 存檔成功後,你應該就會看到整個文字資料已經有語法檢驗了!這些語法資料下節課我們再來慢慢談論,現在先知道編輯程式的時候, 最好先存檔,讓 notepad++ 自動的使用 java 的語法幫你檢查文句有沒有問題,方便你未來查詢指令語法之用。

另外,儲存的時候: (1)在副檔名的部份,一定要選擇『All type』才行!否則會出問題喔! (2)在編寫的時候, 檔名 hello.java 一定要與 public class 接在後面的 hello 一樣,不然會無法編譯或執行!

  • java 程式編譯: 透過 javac

完成原始碼的撰寫之後,現在開始進行編譯的行為。請打開 MSDOS 命令提示字元,一開始的畫面會有點像這樣:

C:\Users\dic> 

接下來你可以使用兩個簡單的指令,先使用名為『 dir 』的指令查詢一下該目錄下有什麼檔名的存在,如下所示:

C:\Users\dic>dir        # 這個指令在查詢該目錄下的檔名列表
2012/09/12  上午 11:54    <DIR>          Desktop
2017/03/06  下午 04:47    <DIR>          Documents
2017/03/13  上午 10:26    <DIR>          Downloads
2012/09/10  下午 03:39    <DIR>          Favorites
2018/07/13  下午 03:39    <DIR>          java
2018/07/13  上午 11:47    <DIR>          Links
2012/09/10  下午 03:39    <DIR>          Music
2012/09/10  下午 03:39    <DIR>          Pictures
2018/07/13  上午 11:47    <DIR>          Saved Games
2018/07/13  上午 11:47    <DIR>          Searches
2012/09/10  下午 03:39    <DIR>          Videos
               0 個檔案               0 位元組
              23 個目錄  11,037,200,384 位元組可用

看到 java 子目錄之後,再以『 cd java 』來進入該子目錄即可!(事實上,剛剛從檔案總管建立了這個目錄後,你的 MSDOS 可能一開始還找不到這個目錄。 不過,你依舊可以執行底下的指令,應該還是能夠進入 java/ 目錄的!)

C:\Users\dic>cd java        # 這個指令在進入名為 java 的子目錄

C:\Users\dic\java>dir       # 你會看到開頭目錄名不同,dir 後的內容檔名列表也不同

2018/07/13  下午 05:11    <DIR>          .
2018/07/13  下午 05:11    <DIR>          ..
2018/07/13  下午 05:11               145 hello.java       <==就是要看到這個檔名,剛剛存檔的
               1 個檔案             145 位元組
               2 個目錄  11,036,733,440 位元組可用

要確定找到你的 java 原始碼檔案才行!找到檔名之後,當然就是要開始編譯了。編譯的流程很簡單,透過 javac 配合檔名即可。

C:\Users\dic\java>javac hello.java      # 一定要加上原始檔名才行!另外,也接受 [tab] 按鈕!
C:\Users\dic\java>dir

2018/07/13  下午 05:34               417 hello.class  <==這個就是 binary code,等等執行它
2018/07/13  下午 05:11               145 hello.java

你會看到多了一個名為 hello.class 的檔案,這個檔案就是編譯後的 binary code 檔!等等要來執行這個檔案的意思。如果沒有看到這個 .class 的檔案, 應該代表編譯不成功。基本上,一般來說,編譯行為中間不會出現訊息。不過如果出現如下的訊息,應該就是代表編譯過程中出現錯誤了!

C:\Users\dic\java>javac hello.java 
hello.java:4: error: ';' expected                      <==數字代表行號、後面解釋代表預測的問題點
                System.out.println ("Hello World!!")
                                                    ^  <==這個 ^ 在告知你出錯的地方
1 error                                                <==總結共有 1 個錯誤 (error)

筆者故意將檔案內第四行最後一個分號拿掉,就出現這個錯誤!因此,出現任何訊息,請不要忽略!尤其如上所示,編譯程式已經告知你哪邊出錯, 針對該位置去處理,就能夠處理完畢了!記得測試完畢要再將分號 (;) 改回來。

  • 在終端機的環境下開始執行程式碼: 透過 java 指令

剛剛編譯成功產生了 hello.class 這個 binary code 的程式檔,要執行時,使用『 java 指令 』即可。但是與 javac 後面要接完整檔名並不相同,使用 java 去執行指令時,只能加上檔名,後面的 .class 千萬不要寫進來!如下所示:

C:\Users\dic\java>java hello.class  # 這是錯誤的!不要加上完整檔名!.class 不要加!
錯誤: 找不到或無法載入主要類別 hello.class
原因: java.lang.ClassNotFoundException: hello.class  <==根本告訴你,這個檔案內容無法被執行!

C:\Users\dic\java>java hello        # 這才是正確的執行方式!
Hello World!!

如果如上所示,出現了 Hello World!! 的字串,恭喜您,你已經完成第一隻 java 程式的撰寫了!未來持續努力,肯定會一直進步的!

  • MSDOS 的檔名補齊任務: [tab] 按鈕,與其他慣用組合按鍵

在 MSDOS 的視窗環境中,如果你想要編譯某個檔名,例如剛剛的 hello.java 時,只要在 javac 後面加上 he[tab],在 he 後面立刻加上 [tab] 按鈕, 就是鍵盤大寫燈號上面的那個按鈕,點一下,它立刻就會補齊檔名,然後多按幾次 [tab] 按鈕,你就會發現檔名會在 he 開頭的檔案之間做切換! 這對於程式設計師來說,很有幫助!大家要多按多按 [tab] 喔!

另外,在 notepad++ 的編輯畫面中,有時候因為系統會主動補齊關鍵字的關係,因此,常常會有彈出式視窗的展示,你可以挑選到正確的文字資料後, 直接按下 Enter 來選擇,如果不想要出現視窗,可以直接按下 [esc] 按鈕即可取消視窗畫面。如下所示:

挑字視窗的處理
  • 可選擇的字: 包括正常的語法保留字、曾在你的這份文稿上面出現的字串都會出現在挑字視窗中;
  • 方向鍵: 可以進行挑字的功能,讓游標在要選擇的字上面
  • Enter: 立刻輸出你要的字
  • [esc]: 取消挑字視窗。

1.5: 參考資料

1.6: 課後練習

先查閱 1.3 小節的介紹,了解雲端系統的登入、繳交資料檔名等等的設計,然後再繼續底下的習題。 最終要上傳的檔案有:

  • unit01-4070CXXX-你的名字.docx
  • unit01-myname.java (純文字檔)
  1. 完成上課的習題內容回答:
    1. 計概的相關問題:
      1. CPU 常見的時脈單位是什麼?他的意義是什麼?(與『工作次數』有關)
      2. 位元 (bit) 與位元組 (byte) 的差異是?
      3. 所謂的電腦五大單元指的是哪五個單元元件?
      4. 電腦五大單元裡面, CPU 內部整合了哪兩個單元?
      5. 目前記憶體的容量主要是什麼單位?
      6. 目前硬碟 (傳統硬碟) 的容量又是什麼單位?
      7. 常見的資料可以存在記憶體與硬碟 (傳統硬碟) 內,請問 (A)哪個速度快 (B)哪個比較穩定可靠?
    2. 作業系統與硬體相關的簡易問題:
      1. 目前你手邊常見的電腦硬體應該有兩種,電腦與手機就是兩種不同的硬體。請找出這兩種硬體的 CPU 架構各別是什麼?
      2. 現代的作業系統主要提供什麼功能?
      3. 說出 (1)桌機常見的三種作業系統、(2)手機常見的兩種作業系統。
      4. 硬體加速的行為有兩種情況,一種是提昇 CPU 的頻寬,一種是增加多個 CPU 核心數,目前哪種是主流?為什麼?
    3. 程式語言的相關問題:
      1. 什麼是 source code 與 binary code
      2. 高階程式語言中,直譯語言與編譯語言的差別是什麼?
      3. 說明 Java applet 與 Java application 的大致差異為何?
      4. 說明 JDK 是什麼? JRE 又是什麼? JVM 的功能為何?
      5. 說明在 windows 的作業系統中,為什麼要修改名為 PATH 的變數,將 java 的運作 (java, javac 等指令) 所在的目錄加入該變數內?
  2. 實習 java 的安裝環境: (本題目最終貼上一個貼圖確認你的學號與 javac 可以運作即可)
    1. 請登入雲端系統 (除了學校內的網址之外,也可以使用 internet 的網址來連線喔!),並且啟用 windows 環境,同時登入 windows 系統喔!
    2. 請在 windows 系統下載 JDK 軟體到這個系統上,然後給予安裝好 JDK。
    3. 設定好環境變數,最後在 MSDOS 視窗中輸入 javac ,將結果截圖後貼上 word 檔案。要注意,截圖裡面必需要包含你的帳號資訊,例如 1.2 的最後面圖示。 否則不知道是誰的畫面喔!
  3. 實習 java 編譯的過程與環境: (本題在 word 檔案內,也請貼上最終的截圖即可)
    1. 請由課程中教導的方式,自行下載 notepad++ 安裝,並啟用該軟體
    2. 請由 1.3 課程教導的方式,自行下載 filezilla client 軟體,並且設定好該軟體的帳號與密碼
    3. 編寫一個名為 unit01_myname.java 的檔案,當這個檔案最後被編譯完成,並且以『 java unit01_myname 』執行後, 會出現如下的字串:
      My name is VBird Tsai
      My ID number is 4070Cxxx
      
      上面的 VBird Tsai 請務必換成你的英文姓名,而 4070Cxxx 務必換成你的學號。將 MSDOS 視窗執行後的結果截圖貼上來。