# 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只有名字很像而已，其實沒什麼關係，不要搞混。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yubin551.gitbook.io/java-note/javafeature.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
