從新開始學習Java了,這也是爲了之後找工做考慮。熱愛的機器學習就先放一放了,做爲興趣愛好研究,不花太多精力了>﹏<前端
這是偏頭痛楊的第一篇原文連接,其中,在系列的第二篇開頭做者佈置了十道題,下面是個人回答(大可能是做者的文章摘錄)。java
跨平臺是指跨不一樣的操做系統,由於從寫java代碼到運行,須要通過兩個過程,Java程序的源代碼(.java)編譯成虛擬機(JVM)能看懂的字節碼(.class),而後再由虛擬機解釋執行成對應的操做系統能看懂的機器碼。
從而實現了所謂的跨平臺,一次編譯到處執行(Write Once,Run Anywhere)。
須要注意的是不一樣操做系統上要裝對應的JVM,但這並不與跨平臺衝突,由於即便不一樣操做系統上的虛擬機的一些細節是不同的,但它們所能看懂的字節碼(.class)都是同樣的,而字節碼是與平臺無關的。程序員
C++web
Sun公司數據庫
詹姆斯-高斯林編程
Java程序的源代碼(.java)編譯成虛擬機(JVM)能看懂的字節碼(.class),而後再由虛擬機解釋執行成對應的操做系統能看懂的機器碼服務器
JVM(Java Virtual Machine):
Java虛擬機,主要負責運行Java編譯器編譯後的字節碼文件(*.class文件),它存在於內存中,與內存打交道。
JVM運行在操做系統之上,與硬件沒有直接交互,JVM是實現跨平臺的核心。
JVM是一種抽象&虛擬出來的計算機,和實際的計算機同樣,
它具備指令集並使用不一樣的存儲區域,它負責執行指令,還要管理數據,內存和寄存器,指令集,寄存器,
類文件的格式,棧,垃圾回收堆,存儲區等。
JVM在執行字節碼時,把字節碼解釋成具體平臺上的機器碼執行。
JVM本身沒法執行,必需要聯合JRE中的Java基礎&核心類庫才能使用。網絡
JRE(Java Runtime Environment):
Java運行環境,支持Java程序運行的標準環境,包括了JVM(Java虛擬機)的標準實現以及Java基礎&核心類庫。框架
jre1.8目錄包含:
bin:有java.exe但沒有javac.exe,沒法編譯Java程序,但能夠運行Java程序,能夠把這個bin目錄理解成JVM。
lib:Java基礎&核心類庫,如rt.jar,也包含JVM運行時須要的類庫。
JRE=JVM+Java基礎&核心類庫eclipse
JDK(Java Development Kit):
Java開發工具包,是一個編寫Java應用程序的開發環境(程序員專用)。
JDK是整個Java的核心,包括了JRE(Java運行環境)與一些Java開發工具(例如:jconsole、javac、java、javadoc、native2ascii、jar等)。
主流的JDK是Sun公司發佈的JDK,除了Sun公司以外,還有不少公司和組織都開發了本身的JDK,
例如:IBM公司開發的JDK,BEA公司的JDK,還有GNU組織開發的JDK。
jdk1.8目錄包含:
bin:一堆exe文件,可執行的開發工具,最主要的是javac, 例如:jconsole、javac、java、javadoc、native2ascii。
jre:java運行環境,包括JVM+Java基礎&核心類庫 。
lib:包含dt.jar+tools.jar的經常使用類庫,開發依賴包。
db:jdk從1.6以後內置了Derby數據庫,它是是一個純用Java實現的內存數據庫,屬於Apache的一個開源項目。用Java實現的,因此能夠在任何平臺上運行;另一個特色是體積小,免安裝,只須要幾個小jar包就能夠運行了。
include:java和JVM交互用的頭文件。
JDK=JRE+Java開發工具(編譯器、調試器等)
JDK&JRE&JVM總結:
JRE是個運行環境,JDK是個開發環境,所以寫Java程序的時候須要JDK,而運行Java程序的時候就須要JRE。
而JDK裏面已經包含了JRE,所以只要安裝了JDK,就能夠開發Java程序,也能夠正常運行Java程序。
但因爲JDK包含了許多與運行無關的內容,例如編譯器、調試器等,佔用的空間較大,
所以運行普通的Java程序無須安裝JDK,而只須要安裝JRE便可(例如在服務器中運行Java程序)。
互聯網應用的服務端程序(包括分佈式系統)
不少第三方交易系統、銀行、金融機構、大型網站、互聯網平臺都選擇用Java開發。
大多數狀況下,Java被用在服務器端開發,但多數沒有任何前端,它們一般是從一個服務器接收數據,
處理後發向另外一個處理系統。
Android應用
許多的 Android應用都是Java程序員開發者開發。雖然 Android運用了不一樣的JVM以及不一樣的封裝方式,
可是代碼仍是用Java語言所編寫。至關一部分的手機中都支持JAVA遊戲,這就使不少非編程人員都認識了JAVA。
大數據技術
Hadoop以及其餘大數據處理技術不少都是用Java,例如Apache的基於Java的HBase和Accumulo以及 ElasticSearchas。
網站
Java在電子商務領域以及網站開發領域佔據了必定的席位。開發人員能夠運用許多不一樣的框架來建立web項目,
SpringMVC,Struts2.0以及frameworks。即便是簡單的 servlet,jsp和以struts爲基礎的網站在政府項目中也常常被用到。
例如醫療救護、保險、教育、國防以及其餘的不一樣部門網站都是以Java爲基礎來開發的。
嵌入式領域
Java在嵌入式領域發展空間很大。在這個平臺上,只需130KB就可以使用Java技術(在智能卡或者傳感器上)。
桌面應用
例如:jmeter,netbeans,freemind,eclipse等。
遊戲
火遍全球的《個人世界》以及一堆java小遊戲。
javac命令是在jdk的bin文件夾下的,做用是將Java源程序(.java)編譯爲虛擬機能明白的字節碼(.class)
java命令是在jre的bin文件夾下的,做用是將虛擬機中的字節碼(.class)解釋執行成對應平臺操做系統能明白的機器碼。
這個省略,去看做者(偏頭痛楊)的文章,或者百度都能OK!
跨平臺
重要的網絡編程語言
吸取了C++的優勢,摒棄了多繼承,指針的概念
不只僅是一門語言,仍是一個龐大的技術體系(包括編程語言、虛擬機、- - 開發環境、應用程序環境、部署環境等)
本文做者:kissjz
本文爲雲棲社區原創內容,未經容許不得轉載。