網頁

2013年3月21日 星期四

Java Programming Introduction 02: misc


在正題之前, 先哈拉一下題外話.

 最近看了一些 Java Programming 的教學網站. 其實資料還算滿多的, 但是, 從一個初學的角度來看, 好像就是把一大堆的東西丟在你面前, 讓你無從下手, 或是一開始先講一些型別, 流程控制, 物件,.... 當然, 從什麼地方入門, 當然是見仁見智. 不過, 從我學習一個新的程式語言的經驗, 一開始要面對不同的程式語言, 不同的開發平台, 甚至不同的 IDE, 不同的函式庫, 往往還沒入門就迷路了, 或是搞不清楚一個 topic 是程式語言本身的範疇, 或是 IDE 增加的屬性, 甚至是函式庫所帶進來的. 這樣在學習會造成困擾, 或是發生問題時, 連要 google 的關鍵字都弄不清楚, 老是找到一些不相干的資訊.

 
我這邊, 最主要的, 是希望提供一個不一樣的觀點. 至於資料型別, 需要再去查, 查過幾遍就會記住. 這些, 我就不囉嗦了.

 以下是比較正統的教學資料. 可以交互參考一下.
http://docs.oracle.com/javase/tutorial/
http://www.tutorialspoint.com/java/index.htm
http://www.java2s.com/Tutorial/Java/CatalogJava.htm
http://www.javabeginner.com/learn-java/introduction-to-java-programming

 1. Java 是什麼 ?


Java 是一種程式語言. Java 寫的程式, 可以由 Java 的編譯器, 轉換成 byte code 的格式. byte code 是一種虛擬的指令碼(機器碼), Java Virtual Machine 可以辨識並執行這個指令碼. 從定義上來說, Java 是一種編譯語言 ( compiled language) 它在編譯階段有經過語法分析及指令碼編成. 也是一種直譯式語言 (interpreted language), 它是被 Java Machine 執行, 而不能自己執行.

* 關於這種分類, 其實沒有太大意義. 譬如說, HTML 是一種 interpreted language , Linux shell script 則根本不算是一種 language.
 
* 語言, 尤其是程式語言, 它是因為需要而產生, 隨時代,環境而變化. 我覺得, 重點應該放在它為什麼被設計成這個樣子? 它追求/想達到的目標是什麼? 為了達到這個目標, 它放棄了什麼 ?
 
 

2. 物件 (Object) 是什麼 ?


初次進入物件導向世界的人, 很難搞清楚物件的概念, 問題就是把它困難化了. 這邊舉一個例子, 幼稚園的小朋友玩家家酒, 一個扮爸爸, 一個扮媽媽, 扮爸爸的就要拿公事包去上班, 媽媽就要去做菜. 在這個例子中, 小朋友一號就是實體化了爸爸這個物件. 所以它就要去實作拿公事包去上班這個方法(method). 小朋友二號實體化了媽媽這個物件, 實作了做菜這個方法. 爸爸和媽媽這兩個物件, 合起來成為家庭這個物件. 也可以說, 家庭這個物件包含(contain)了爸爸和媽媽這兩個物件. 而小朋友在玩的家家酒, 則是具體化了家庭這個物件. 隔壁小朋友在玩的, 則是家庭這個物件的另一個實例 (instance).

 演什麼像什麼, 就是物件的概念. 至於, 物件的定義, 繼承, 封裝, ..., 就逐步去熟悉就可以了.

 3. Java 的組成, javac/java/jar


Java 的核心, 就是編譯, 執行, 打包.
 
javac Java 的編譯器, java 的原始碼, 編譯成 JVM 可執行的檔案 .class.
java Java 的執行器, 內含 JVM, 可以執行 .class
jar Java 的打包器. 可以好幾個 .class 打包成 .jar, .jar可以是函式庫, 也可以是執行檔, 這部份下次會說明.

4. Java Android 的關係


猛獁是一種史前時代的巨大動物, 高度可以到達 4 公尺. 但是在克里特島, 卻因為島嶼化的關係, 高度小型化到 90 公分左右. 但是 DNA 檢驗證明, 這是同一種動物.

同樣的, 為了適應 mobile 的應用, Java 新增/修改成了一個特別的版本, 但是, 它仍然是 Java.
 
通常, 可以在 Desktop 上面撰寫 Java 的程式碼, 再移植到 Android 的平臺上. 我看到有很多人建議這樣做. 譬如說, Eclipse 就整合了 Java/Android 的專案開發/debug, 甚至 git 的版本管理. 在 Eclipse  的開發環境中, 可以對 Java 進行逐步偵錯, 確實比較方便.

5. Java 可以做什麼, Java 提供了什麼 ?


Java 所特重的, 並不是它有提供了什麼, 而是它可以很容易的被重複使用. 因此, 我們可以很容易透過加入其他的 library (jar) , 而完成我們要完成的工作. 甚至, 我們也可以再透過它完成其他的工作. 因此, jar 也被設計成同一個 jar 可以被執行, 也可以被呼叫.

也因為 Java 的這個特性, 我們可以找到非常多的 library 來用. 有些 library 因為太常用, 常常在尋找資料(source code) , 頻繁的出現, 反而造成混淆, 下面列出來一些常見的 library, 了解這些名稱是什麼, 會對自己查資料有幫助:

AWT (java.awt): GUI (Graphic User Interface) library
Swing (javax.swing): GUI (Graphic User Interface) library.
SWT (The Standard Widget Toolkit): GUI (Graphic User Interface) library
Eclipse: an IDE (一種整合開發環境 )

JDBC (Java Database Component): 資料庫介面

java.io (Java input/output library)
 

另外, 以下列出來了很多 java 可以用的 library, 有點印象會對了解找到的 source code 有幫助.
http://en.wikipedia.org/wiki/Category:Java_libraries

 

沒有留言:

張貼留言

請提供您寶貴的意見