JVM生存指南精簡版

本文章為翻譯稿化焕,原文請看:http://hadihariri.com/2013/12/29/jvm-minimal-survival-guide-for-the-dotnet-developer/

本文同時(shí)是對我這篇文章的補(bǔ)充:http://www.reibang.com/p/0cd7678fd9bb

目標(biāo)讀者

本指南主要針對.NET開發(fā)人員恼五,因?yàn)榕c.NET進(jìn)行了很多比較。實(shí)際上URL仍然表明它或辖。話雖如此字柠,我希望它對于也是Java平臺新手的非.NET開發(fā)人員來說也是有用的。

基礎(chǔ)

Java語言 ? Java生態(tài)系統(tǒng) ? Java的JVM

他們是不同的雁比。一個是編程語言(類似C#)淳蔼,另一個是生態(tài)系統(tǒng)(ecosystem)(類似.NET)不幸的是侧蘸,似乎Java通常用于指所有三個。我不喜歡Java作為一種語言鹉梨,但Java生態(tài)系統(tǒng)非彻胛海活躍,并且正在發(fā)生大量的創(chuàng)新俯画。實(shí)際上析桥,作為.NET開發(fā)人員,您可能熟悉NHibernate,NUnit泡仗,NLog埋虹,NAnt等庫,這些庫源自Java生態(tài)系統(tǒng)(drop the N)娩怎。

多語言平臺

我們可以將JVM視為CLR搔课。兩者都是為多種語言提供平臺的虛擬機(jī)。他們有差異截亦,但是支持多種語言爬泥。而在CLR,我們大多使用C#崩瓤,VB.NET和F#袍啡,在JVM上有Java, Scala, Clojure, Ceylon, Groovy, JRuby和Kotlin等等。(在我這篇文章中却桶,就使用了Kotlin)

JVM 字節(jié)碼

JVM字節(jié)碼是基于JVM的語言編譯為在JVM上運(yùn)行境输。它類似于.NET中的IL。

跨平臺

JVM是100%的跨平臺颖系。除了Windows嗅剖,OSX和Linux之外,它還運(yùn)行在許多其他類型的設(shè)備上嘁扼。

JVM實(shí)現(xiàn)信粮,版本和版本

JVM有多個實(shí)現(xiàn)版本。最常見的是Oracle和OpenJDK趁啸。甚至有一個稱為IKVM.NET的.NET實(shí)現(xiàn)版本强缘。

編輯器和版本

這可能是本指南中最復(fù)雜的部分。令人驚奇的是莲绰,您可以如命名/版本控制一樣簡單。這甚至使微軟的產(chǎn)品命名看起來不錯姑丑。

Editions

JRE - Java Runtime Environment. 這是用于運(yùn)行JVM應(yīng)用程序蛤签。您只能通過這種方式開發(fā)在JVM上運(yùn)行的應(yīng)用程序。

Java SE (JDK) - Java Standard Edition. 也稱為JDK栅哀。這是您在JVM上開發(fā)應(yīng)用程序所需的最低要求震肮。

Java EE - Java Enterprise Edition. 名字已經(jīng)非常清楚地說明了。這就是您所有的Enterprisey的東西留拾,如分布式戳晌,大規(guī)模的應(yīng)用程序。是的痴柔,不能更模糊沦偎。它包括Java SE。

Java ME - Java Micro Edition. 這是一個較小的子集,專注于手機(jī)和較小的設(shè)備豪嚎。這就像.NET Micro Framework搔驼。

JavaFX- Swing的替代,它是/是Java中的主要GUI工具包侈询。另外(雖然有爭議的話題)也是針對RIA的舌涨。好像HTML / JS / CSS不夠好嗎?

你可以推斷扔字,所有的Java XY都是JDK的囊嘉。

點(diǎn)擊此處查看更多。

Versions

目前發(fā)布的Java版本是8革为。想要查看您安裝的Java版本扭粱,請輸入:

java -version

你會得到這樣的東西:

java version "1.8.0"

Java(TM) SE Runtime Environment (build 1.8.0-b132)

Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

但是為什么顯示的是1.8.0呢。其實(shí)篷角,這里Java8意味著減去前面的1焊刹,所以同樣的1.5表示Java 5. 1.6是Java 6. 1.7是Java 7。

安裝Java

可以參考一下:http://www.reibang.com/p/4a90505e448c

應(yīng)用程序輸出a.k.a工件(Application Output a.k.a Artifacts)

在.NET以及本地應(yīng)用程序中恳蹲,編譯時(shí)通常會得到可執(zhí)行文件和/或一系列DLL虐块。使用Java,您可以在輸出文件夾中獲取一堆.class文件嘉蕾。每個類文件通常對應(yīng)于Java類(當(dāng)編譯Java語言或編譯為字節(jié)碼時(shí)遵循約定的其他語言)贺奠。這些類是JVM字節(jié)碼,它類似于CLR上的IL错忱。

JAR文件

與其創(chuàng)建很多個類文件儡率,不如創(chuàng)建一個JAR,它只不過是.class文件的壓縮版本以清。您可以使用自己喜愛的工具創(chuàng)建JAR文件儿普,或者直接運(yùn)行:

jar cf jar-file input-file(s)

jar附帶JDK(/ bin文件夾)。

WAR文件

WAR文件是由Sun創(chuàng)建的Web應(yīng)用程序的JAR文件掷倔。它包含一堆類文件和一些額外的元數(shù)據(jù)和文件夾眉孩,其中包含諸如TomCat之類的Web服務(wù)器的信息。

運(yùn)行Java應(yīng)用程序

任何具有主類的Java應(yīng)用程序都可以從命令提示符運(yùn)行勒葱。類型:

java <class_containing_main_method>

你必須從.class文件的文件夾運(yùn)行它浪汪。

類路徑

運(yùn)行應(yīng)用程序時(shí),JVM將查找當(dāng)前文件夾中所有必需的依賴項(xiàng)凛虽,然后查找CLASSPATH環(huán)境變量死遭,該變量指向包含.class文件或JAR / ZIP的一個或多個文件夾。您可以全局設(shè)置CLASSPATH環(huán)境變量凯旋,然后由Java使用它呀潭,或者在運(yùn)行應(yīng)用程序時(shí)將其作為命令行參數(shù)傳遞:

java <class_containing_main_method> -cp <class_path>

每個條目都用冒號分隔钉迷。

構(gòu)建工具

在.NET中,有許多的構(gòu)建工具例如MS Build, NAnt, Albacore, Fake 等等蜗侈。而JVM也沒有落后篷牌。雖然有許多的語言使用他們自己的構(gòu)建工具,例如Clojure的Leiningen和Scala的SBT踏幻。大多數(shù)的語言(包括以前的)可以使用更多的標(biāo)準(zhǔn)構(gòu)建工具枷颊。

Ant

這是XML,這是NAnt的基礎(chǔ)该面。這很像MS-Build夭苗。

Maven

Maven更加地流行。當(dāng)你看一個包含pom.xml工程文件的時(shí)候隔缀,這就是Maven题造。它同時(shí)也是XML。但是猾瘸,Maven不僅僅是一個構(gòu)建工具界赔。這是一個包裝系統(tǒng)。就像在NuGet的.NET牵触,像NPM在Node.js.很像nuget.org淮悼,還有一個maven.org。并且類似于整個“如果不在nuget.org它不存在”揽思,那么在Java生態(tài)系統(tǒng)中也是一樣的情況袜腥。像NuGet一樣,您還可以托管自己的Maven存儲庫钉汗。 Artifactory是一種允許您這樣做的產(chǎn)品羹令。

Gradle

Gradle是一個更好的Maven。它基于Groovy损痰,所以你擺脫了可怕的XML福侈,并提供了一個更好的管理依賴的方式。

IntelliJ IDEA 構(gòu)建

雖然IDE和更多屬于工具部分卢未,IntelliJ IDEA還提供自己的構(gòu)建系統(tǒng)肪凛。但是,您只能在了解它的環(huán)境中使用它尝丐,這基本上是IntelliJ IDEA和TeamCity显拜。

*注:使用這個工具衡奥,我寫過一篇文章爹袁,請看這里

框架和庫

有太多的框架和庫列出矮固,所以我將簡短地說明這一節(jié)失息。

JSON Serialization (JSON序列化)

簡介:在JSON文本和.NET對象之間轉(zhuǎn)換的最快方法是使用JsonSerializer譬淳。 JsonSerializer將.NET對象轉(zhuǎn)換成JSON等價(jià)物,并將.NET對象屬性名稱映射到JSON屬性名稱并將其復(fù)制盹兢。

參考文章(英文):http://www.newtonsoft.com/json/help/html/SerializingJSON.htm

也可以看看筆者我翻譯的(部分):http://tli-tli.com/2017/07/08/json-serialization/

Unit Testing

相當(dāng)多的單元測試框架:

JUnit- 作為標(biāo)準(zhǔn)邻梆。效果很好。幾乎所有的工具都支持绎秒。

Spek- 免責(zé)聲明浦妄。這是我自己的框架,但是由于我使用它见芹,所以值得一提剂娄。提供更好的DSL。至少我覺得如此玄呛。

JBehave-Dan North’soriginal JBehave framework.

TestNG- 替代JUnit阅懦。

-----------------------------------分割線--------------------------------------------------

最后更新日期:2017/07/08

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市徘铝,隨后出現(xiàn)的幾起案子耳胎,更是在濱河造成了極大的恐慌,老刑警劉巖惕它,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怕午,死亡現(xiàn)場離奇詭異,居然都是意外死亡怠缸,警方通過查閱死者的電腦和手機(jī)诗轻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揭北,“玉大人扳炬,你說我怎么就攤上這事∩μ澹” “怎么了恨樟?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疚俱。 經(jīng)常有香客問我劝术,道長,這世上最難降的妖魔是什么呆奕? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任养晋,我火速辦了婚禮,結(jié)果婚禮上梁钾,老公的妹妹穿的比我還像新娘绳泉。我一直安慰自己,他們只是感情好姆泻,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布零酪。 她就那樣靜靜地躺著冒嫡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪四苇。 梳的紋絲不亂的頭發(fā)上孝凌,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機(jī)與錄音月腋,去河邊找鬼蟀架。 笑死,一個胖子當(dāng)著我的面吹牛榆骚,可吹牛的內(nèi)容都是我干的辜窑。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼寨躁,長吁一口氣:“原來是場噩夢啊……” “哼穆碎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起职恳,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤所禀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后放钦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體色徘,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年操禀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了褂策。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡颓屑,死狀恐怖斤寂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揪惦,我是刑警寧澤遍搞,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站器腋,受9級特大地震影響溪猿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纫塌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一诊县、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧措左,春花似錦依痊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钳枕,卻和暖如春缴渊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鱼炒。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工衔沼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昔瞧。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓指蚁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親自晰。 傳聞我的和親對象是個殘疾皇子凝化,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)酬荞,斷路器搓劫,智...
    卡卡羅2017閱讀 134,716評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,867評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,332評論 25 707
  • 一切都會過去枪向,不管是喜是憂、是悲是樂咧党。 成功時(shí)秘蛔,莫要忘自持;失敗時(shí)傍衡,莫要忘快樂深员。人生就像天平,少一分失意蛙埂,就少一份...
    文靜視界閱讀 437評論 0 2
  • 王健林最近一段視頻非诚洳校火滔迈,說的是先定一個小目標(biāo),先賺他一個億被辑,這句話嚇?biāo)缹殞毩肆呛罚覕[個地?cái)倯?yīng)該先定一個什么目標(biāo)呢?...
    晴空依然閱讀 404評論 0 2