> For the complete documentation index, see [llms.txt](https://yubin551.gitbook.io/java-note/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yubin551.gitbook.io/java-note/javafeature.md).

# Java 特性

> 說明Java與其他程式語言主要有哪些差異

* 高階程式語言 (high-level programming language)
* 簡單且純物件導向 (simple and purely object-oriented)
* 可攜性 (portable)
* 開發網路應用 (developed in world wide web applications)

## 高階程式語言

若將程式語言概括分為低階語言和高階語言兩種，Java是屬於高階程式語言。

低階語言不是比較low，而是更接近機器端的語言，如由01位元構成的機器碼(CPU執行，幾乎不具可讀性)、組合語言(比機器碼具可讀性，但仍不易理解)。

高階語言一般被認為具有可讀性，需要有編譯器(預處理器)轉為執行碼才交由機器執行。

高階語言與低階語言的分類沒有明確定義，但也不需要定義。重要的是你要知道現在你要開發的程式在哪裡被執行、用來提供什麼樣的功能。不管哪種程式語言都是為了方便工程師解決問題而開發的。

## 簡單且純物件導向

簡單，

上述提到Java屬於高階語言，具有可讀性，且內建函式通常是由簡單英文單字構成，因此稱為簡單。但Java的世界無遠弗屆，縱使已經公開於世二十多年，但仍不斷的在進化更新。若終止學習，或連想學習的心都沒有，那可能不能算上簡單了。

純物件導向， purely object-oriented ，

Java的世界即是物件的世界，C語言可以用一個函式做為一個程式的最小單位 int main(){...}，但Java是純物件導向，一個Java程式至少會有一個物件，該物件執行方法(method)來達成所需要的功能。詳細物件的介紹後面章節會深入說明，這邊重點是Java程式的一個最小單位是一個物件，C是函式導向，C++是半函式導向半物件導向，因此學習好Java的純物件導向，往後要學習其他物件導向的語言會非常容易上手，而事實也是在Java之後被開發出來的熱門語言大多都會涵蓋物件導向的精神(如Apple的Swift)。

## 可攜性

> "*Write once*, *run anywhere*" 這是Sun公司推出Java語言時喊的口號，一語道出了Java的跨平台特性。

也就是說工程師可以在自己電腦上開發程式，並將產生的執行檔拿到其他支援Java的系統上運作，且不需任何調整。這點大大增加了程式的通用性，減少工程師為了不同平台而重複寫很多類似功能的時間。在許多晶片、設備、軟體包中安裝Java已經變成一種標準。

**但這點又是如何做到的？**

『程式碼經過Compiler的編譯，產生執行檔，然後交由機器執行。』讓我們來把這句話講得更清楚。

如果想要在windows上開發C語言程式，你需要做的是：

撰寫C語言程式 -> 利用windows平台的C語言編譯器，編譯產生windows的可執行檔 -> 交由windows執行。

注意到了嗎？若同樣的程式要在Linux系統上執行，需要利用Linux的C語言編譯器，產生Linux的可執行檔，才能執行。

換另一個平台就要類似的動作在做一次，還不能保證出來的結果不會有問題，因為C或C++語言資料型態、指標的位元組大小會因平台及作業系統的bits不同而不同。

![](http://openhome.cc/Gossip/JavaEssence/images/WhyJVM-2.jpg)

Java的開發為了克服這個問題，使用了一個名叫JVM (Java Virtual Machine)的Java執行環境。『所有』的Java程式，都是在JVM上執行。因此所有Java上的資料型態在JVM上都是統一的，不會因為作業系統不同而產生不同的結果，這個特性使就是Java可以跨平台的關鍵。

或許你會覺得很弔詭，明明是想在windows上開發Java程式，為什麼突然蹦出一個Java虛擬機器(JVM)，還說我的程式要在上面跑？

你可以把JVM當作與作業系統溝通的『橋梁』，你跟JVM說你想要印一段文字，JVM會解析你的.class檔 (Java的執行檔)，然後去作業系統那邊執行相對應的工作。所以你完全只需要跟JVM溝通，不用理會當前是什麼作業系統。

> 要在windows上執行Java，就給windows-JVM你編譯出來的Java執行檔。
>
> 要在Mac OS上執行Java，就給Mac OS-JVM你編譯出來的Java執行檔。
>
> 要在Linux上執行Java，就給Linux-JVM你編譯出來的Java執行檔。

只要該作業系統上有支援相對應的JVM，你所撰寫的Java就可以在該作業系統上的JVM執行。

![](http://openhome.cc/Gossip/JavaEssence/images/WhyJVM-3.jpg)

~~\~ 或許你已經發現，Java根本不是所謂的跨平台ww \~~~

Java程式只有在一個平台上可以順利執行，那個平台叫做JVM，而支撐著Java可以到處在任何OS上執行的背後推手，就是那些開發不同平台JVM的工程師們。對JVM來說 他只認得 .class的執行檔，解析這個.class執行檔，會跟作業系統要資源執行命令處理資料。

## 開發網路應用

Java是因為瀏覽器而爆紅的，而他也提供許多API來開發網路應用。不論是瀏覽器上執行的Java Applet，或是要開發Server、Client都很方便。

備註一下，Java跟JavaScript只有名字很像而已，其實沒什麼關係，不要搞混。
