位元詩人 [Java] 程式設計教學:簡介

Java
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

在本文先不急著寫 Java 程式,來看看 Java 相關的概念。

Java 的問世

Java 於西元 1995 年問世。原本 Java 是為了發展智慧家電 (smart appliance) 所開發的程式語言。經長年發展,成為主流的通用型程式語言。Java 曾經以 Java Applet 的形態存在於網頁前端,目前則是網頁後端的主要語言之一。

這個語言在語法上刻意向 C 和 C++ 致敬,但移除指標操作和記憶體管理等較為困難的特性。也算是有意識地簡化開發工具,讓程式設計者易於轉換到新的平台。

為什麼要學 Java?

Java 是多用途且應用廣泛的程式語言。除了在商業上大量使用外,也有很多科學軟體以 Java 實作。有些大專院校會以 Java 取代 C 和 C++,做為實作資料結構 (data structure) 和演算法 (algorithm) 的開發工具。雖然這樣的現象是好是壞有待討論。

要跨平台就用 Java?

雖然 Java 主打 WORA (Write Once, Run Anywhere),但跨平台是現代程式語言常見的特性,不需為了讓應用程式跨平台而刻意選擇 Java。目標程式的形態和所需的物件庫才是考量 Java 的要點。

寫 Java 程式就是寫物件導向程式?

Java 的確刻意把物件導向範式融合進語法當中,但不代表 Java 程式就一定是物件導向程式。若某個 Java 程式全部都用基礎型態 (primitive type) 搭配靜態函式 (static function) 來寫,實際上和寫 C 程式相差不遠。

即使有用到類別 (class),若未經適當規畫,把所有程式碼都塞到同一個類別中,這樣的物件導向程式是沒有意義的。學習 Java 語法不代表學習物件導向程式設計。物件導向是一種思維,而不是一種程式語言。

Java 的實作品

Oracle Java

Oracle Java 為 Java 的實質標準 (de facto standard),理應是選擇 Java 實作品的首選。但 Oracle Java 變成訂閱制的付費軟體,還在學習階段或者是早期評估時,不一定要馬上購買付費服務。先用免費的 OpenJDK 一陣子,之後隨需求再轉用 Oracle Java 即可。

OpenJDK

OpenJDK 是免費且開源的 Java 實作品,和 Oracle Java 在功能上大同小異 (出處)。Oracle Java 是基於 OpenJDK 製作而成的,但在穩定性、效能等面向會更好,而且會有一些獨特的特性。

若不知道使用 Oracle Java 有什麼好處的話,代表當下用不到那些特點,暫時先用免費的 OpenJDK 來學習 Java 即可。

GraalVM

GraalVM 是一個新的 Java 平台。支援多種程式語言 (Java、JavaScript、Python、Ruby、R),而且可以把前述程式語言編譯成執行檔 (native binary)。對於學習階段來說,不需要刻意使用這個平台。

Java 的版本 (Edition)

Java 分為只有運行環境的 JRE (Java Runtime Environment) 和附帶開發工具的 JDK (Java Development Kit)。要撰寫 Java 程式的話,需要安裝後者。

Java 平台 (Java Platform)

Java 平台有以下數個版本:

  • Java ME (Java Platform, Micro Edition):用於嵌入式裝置
  • Java SE (Java Platform, Standard Edition):用於桌面、伺服器
  • Jakarta EE (Jakarta Enterprise Edition) (先前為 Java EE):用於伺服器

一開始學習 Java 時用的是 Java SE。

Java 的發行版本 (Version)

目前 Java 可見的大版本如下:

  • Java 18
  • Java 17 (LTS)
  • Java 16
  • Java 15
  • Java 14
  • Java 13
  • Java 12
  • Java 11 (LTS)
  • Java 10
  • Java 9
  • Java 8 (LTS)
  • Java 7

版本那麼多,要如何選擇呢?

Java 提升一個大版本號時,會新增語法特性。在同一個大版本內的小版本變動則是安全性更新。Java 的大版本號分為一般版本和長期支援版本 (註) 。後者的支援週期會比前者來得長。

(註) LTS (long-term support)。比一般版本有更長的支援週期,就不需要頻換版本號

一般來說,選擇 Java 版本號的方式是固定在某個長期支援版本;在該版本出現小版本更新時就將運行環境升上去。固定在同一個大版本號是希望專案的語法特性穩定;使用長期支援版本而非一般版本則是因為前者支援週期更長。

本系列文章會使用 Java 17。

Java 平台語言

Java 平台除了 Java 外,有多種程式語言可以使用。以下是一些例子:

  • Groovy:類似於 Ruby 的物件導向語言。刻意在語法上相容於 Java
  • Scala:兼具物件導向和函數式範式的語言
  • Kotlin:近來很紅的 Java 平台語言。主要用途為寫 Android 軟體
  • Clojure:Java 平台上的 Lisp

一開始時,建議先學 Java。之後再視需求加學另一個 Java 平台語言。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。