2018年10月29日 星期一

Java SE 入門教學 - 認識Java編程語言

更新時間:10/29/2018

前言

James Gosling 是加拿大計算機科學家,最著名的是 Java 編程語言背後的創始人和首席設計師。

James Gosling:「我看見窗戶外面有顆橡樹,所以將它取名為 Oak,但後來發現 Oak 這個名稱已經被註冊使用了,大家喝著咖啡邊討論新的名稱,才靈機一動的將之改名為"Java"。」



一、Java 語言的特性

Java 之所以被開發,是要達到以下五個目的:

  • 應當使用"物件導向"程式設計方法學
  • 應當允許同一程式在"不同"的電腦平台執行
  • 應當包括內建的對電腦網路的支援
  • 應當被設計成安全地執行遠端程式碼
  • 應當易於使用,並借鑑以前那些物件導向語言(如C++)的長處。

1.1 物件導向

「物件導向程式設計語言」的核心之一就是開發者在設計軟體的時候可以使用自訂的類型和關聯操作。程式碼和資料的實際集合體叫做「物件」。一個物件可以想像成繫結了很多「行為(程式碼)」和「狀態(資料)」的物體。

1.2 跨平台性

執行 Java 應用程式必須安裝 Java 執行時環境(Java Runtime Environment,JRE),JRE 包括 Java 虛擬機器(Java Virtual Machine,JVM),以及 Java 平台核心類和基礎 Java 平台庫。通過 JVM 才能在電腦系統執行 Java 應用程式(Java Application),這與 .Net Framework 的情況一樣,所以電腦上沒有安裝 JVM,那麼這些 java 程式將不能夠執行。

1.3 自動垃圾回收(Garbage Collection)

對象的建立和放置都是在記憶體堆疊上面進行的。當一個物件沒有任何參照的時候,Java的自動垃圾收集機制就發揮作用,自動刪除這個物件所佔用的空間,釋放記憶體以避免記憶體洩漏。

注意程式設計師不需要修改finalize方法,自動垃圾收集也會發生作用。但是記憶體洩漏並不是就此避免了,當程式員疏忽大意地忘記解除一個物件不應該有的參照時,記憶體洩漏仍然不可避免。

二、環境架設

2.1 JDK 和 JRE 安裝

請參閱:Java SE 入門教學 - 安裝與環境設定

2.2 純文字編輯器

Windows 系統:記事本 (Notepad)。
Mac 系統:文字編輯 (TextEdit )。
Linux 系統:vim 程式編輯器。
我使用 Notepad++。請參閱:安裝 Notepad++

2.3 整合開發環境(Integrated Development Environment,簡稱 IDE )

NetBeans
Eclipse

三、JDK 有什麼?

bin資料夾:

提供開發 Java 程式時所必需的一些工具程式,像是 javac 編譯器、java 執行程式、測試 Applet 的 appletviewer 程式、製作說明文件 javadoc 程式、製作 JAR(Java Archive File)檔的 jar 程式、製作證書 keytool、轉碼工具 native2ascii等。

include資料夾:

C 語言程式檔的存放位置。初期 Java AWT 圖形使用者介面是依賴作業系統的高層用戶介面模塊,故使用 C 語言撰寫。之後圖形使用者介面被 Swing 工具包替代。最後使用 JavaFX。

jre資料夾:

在 JDK 資料夾下的 jre 資料夾,是 JDK 自己要使用的 Java 執行環境,因為 JDK 所提供的工具程式多數是由 Java 撰寫而成。

jre/bin/server 資料夾底下有個檔案 jvm.dll,此為 JVM 虛擬機器,是 Java 程式唯一認得的執行機器。因為這台機器,使得「Java 跨平台性」變得可行。

lib資料夾:

在 lib 資料夾下放置了一些由 Java 撰寫而成的 JDK 工具程式,這些 JDK 工具程式被封裝為 JAR(Java Archive File)檔案,JAR 檔案專門用來封裝 Java 程式,它採用與 zip 壓縮檔案同樣的格式,如果您想要看看 JAR 檔案實際上封裝了哪些 Java 工具程式,可以使用解壓縮軟體來開啟這些檔案。

javafx-src.zip壓縮檔:

JavaFX 原始程式碼。合併至 Java SE 7 版本之後。

src.zip壓縮檔:

Java 原始程式碼。

在 C:\ 目錄創建一個資料夾 JavaCode,用來存放 Java 程式碼。

開啟 notepad++,打上您的第一支 Java 程式,建議自己一個字母一個字母慢慢敲程式碼,這雖然非常花費時間,不過,是一個很好練習打字的機會,可以靜下心來體會程式碼的構成。

程式碼儲存至 c:\JavaCode 目錄底下,檔名為 Test1.java,請注意大小寫,Java 是屬於字母大小寫敏感的語言。

4.1 類別

Java 是物件導向語言,寫 Java 程式通常都是由定義「類別」(class)開始。我們定義了一個類別叫做「Test1」,隨後接著用大括號「{ }」包起來,裡頭寫的東西是屬於這個類別。類別主要功能為分類「變數(variable)」與「方法(method)」。

當您定義好類別名稱,JAVA 建議一個程式儲存成一個檔案,檔名為類別名稱,大小寫有差別,這邊的例子為 Test1.java。


4.2 方法

類別裡頭有一個 main() 方法(Method),它是 Java 程式的「進入點」,程式的執行是由進入點開始的,它一定是個"public"成員(Member),這樣它才可以被呼叫;由於它不需要產生物件實例就要能夠被執行,所以它必須是個"static"成員。"void"表示這個方法執行結束後不傳回任何值,Java 程式的主方法不需傳回任何值,所以一律使用 void。 main(String[] args) 其中"String[] args"是 main 方法的參數,這部分未來再介紹。隨後接著用大括號「{ }」包起來,裡頭寫的東西是屬於這個方法。

Java 方法的基本語法如下所示:

存取修飾子(access modifiers):設置類別、變數、方法和建構子的訪問級別。

  • public(公開):任何其他類別與自己都可以訪問。
  • protected(保護):只有子類別、相同資料夾內的類別與自己可以訪問。
  • default(預設):在相同資料夾內的類別與自己可以訪問。
  • private(私有):只有自己能訪問自己,其他的類別都不行。

+

  • static(靜態):

1. JVM 會自動載入靜態的變數及副程式至記憶體。
2. 全域變數。
3. 資料共用。

型態(type):

基本型態(Primitive type):byte、short、int、long、float、double 與 char。

類別型態(Class type):例如 String、Print 或 自訂類別,如 Test1。

識別碼(identifier):

方法名稱。

參數列(type param, ...):

用來設定方法可接受的引數個數與型態,每個參數之間以逗號區分,如果方法不接受任何引數,則參數列保持空白即可。



4.3 程序

方法內只有一行指令碼,輸出 Hello Java! 文字。

這一行指令中,使用了 java.lang 套件下的 System 類別,使用它的公開成員 out 物件,它是一個 PrintStream 物件,您使用了它所提供的 println() 方法,將當中指定的字串(String) "Hello Java!" 輸出至 Console 上。

五、編譯 *.java 與執行 *.class

打開命令提示字元(cmd),切換目錄 cd c:\JavaCode,查看目錄下檔案 dir,編譯原始檔 javac Test1.java。


編譯完成後,同一個目錄下會產生一個 Test1.class 檔案,在執行時期時可以由執行環境轉換為平台可執行的格式,要執行它必須使用 java 公用程式,如下所示:

六、總結

Java 編程屬於物件導向,編寫第一個 Java 程式中含有「類別」、「方法」、「存取修飾子」、「使用libraries」等多種物件導向知識,對於第一次接觸的人而言,是相當複雜且難懂。後續章節會陸陸續續介紹。

原始檔副檔名為 *.java ,JVM 虛擬機器認得的執行檔 *.class ;公用程式 javac 編譯原始檔,公用程式 java 執行 *.class 轉換為平台可執行的格式。





沒有留言:

張貼留言