學習一門語言首先要對他有一定的瞭解。否則就會失去最基本的東西。
一、什麼是Java
通俗將就是計算機語言的最新版本,計算機經歷了C語言、C++語言、以及C+±-語言。這裡的C++ - -語言就是Java語言。Java語言是C語言的第三個計算機語言革命,C++語言是對C語言不足處的改進,的一門語言。而Java語言是面對C++語言的不做又一步的改進。為最大的革進新穎,決定不叫C+±-而後一些過程,最終叫Java。
Java與C語言以及C++語言相比的優勢其又跨平臺性、可移植性。
二、sun jdk
眾所周知,java執行在jvm虛擬機器器上,其中虛擬機器器又分很多種。到目前為止java代表的並不是jvm。
jvm可以理解成一個不透明的沙盒,提供了一些介面允許輸入輸出,當然也提供了一些基本的監控。java被當成了編寫程式執行在jvm上的一門程式語言。
sun jdk主要分為bin、lib、 jre 、jre/lib 、 jre/bin 幾大塊:
bin是Java工具,可以調起java的一些可執行包,比如java的編譯,最主要的是編譯器(javac.exe)。
lib是java基礎類庫。
jre是執行JAVA程式所必須的環境的集合,包含JVM標準實現及Java核心類庫,也就是說執行一個java程式只需要包含jre部分即可,但是jre只能執行,不能編譯。
jre/lib是JVM標準實現及Java核心類庫。
jre/bin相當於jvm,提供了編譯後的二進位制檔案的執行環境。
可以看出 jdk是最全的包含了所有的java所需包括jre,而jre只有執行環境,其中jre包含jvm。
三、回到核心
回到本質上,jvm接受的是二進位制檔案,而不是指定java語言編寫的二進位制檔案,所以使用其他語言比如python、c、c++、go等語言,只要能將其編譯成jvm可理解的二進位制檔案,就能在jvm上執行,當然這個過程非常艱難,要知道難在哪,需要搞清楚java編譯器編譯出來的二進位制檔案的格式是怎麼樣的,這個問題我將在後續的java編譯、指令重排中介紹。
當下對java程式設計師的技能水平考驗的更多是jvm的瞭解和掌握程度,而非java語言特性。絕大多數jvm都是由c++或者c(c與c++歷來不分家)編寫,當然也有用java實現虛擬機器器的版本。要搞懂jvm不必去搞c,但是搞過c的人都知道寫起c來跟寫起java來,完全不是一回事,java給我們的是全套封閉式的環境,同時也是束縛程式設計師的一大壁壘。