JVM生存指南精简版

本文章为翻译稿,原文请看:http://hadihariri.com/2013/12/29/jvm-minimal-survival-guide-for-the-dotnet-developer/

本文同时是对我这篇文章的补充:http://www.jianshu.com/p/0cd7678fd9bb

目标读者

本指南主要针对.NET开发人员,因为与.NET进行了很多比较。实际上URL仍然表明它。话虽如此,我希望它对于也是Java平台新手的非.NET开发人员来说也是有用的。

基础

Java语言   Java生态系统   Java的JVM

他们是不同的。一个是编程语言(类似C#),另一个是生态系统(ecosystem)(类似.NET)不幸的是,似乎Java通常用于指所有三个。我不喜欢Java作为一种语言,但Java生态系统非常活跃,并且正在发生大量的创新。实际上,作为.NET开发人员,您可能熟悉NHibernate,NUnit,NLog,NAnt等库,这些库源自Java生态系统(drop the N)。

多语言平台

我们可以将JVM视为CLR。两者都是为多种语言提供平台的虚拟机。他们有差异,但是支持多种语言。而在CLR,我们大多使用C#,VB.NET和F#,在JVM上有Java, Scala, Clojure, Ceylon, Groovy, JRuby和Kotlin等等。(在我这篇文章中,就使用了Kotlin)

JVM 字节码

JVM字节码是基于JVM的语言编译为在JVM上运行。它类似于.NET中的IL。

跨平台

JVM是100%的跨平台。除了Windows,OSX和Linux之外,它还运行在许多其他类型的设备上。

JVM实现,版本和版本

JVM有多个实现版本。最常见的是Oracle和OpenJDK。甚至有一个称为IKVM.NET的.NET实现版本。

编辑器和版本

这可能是本指南中最复杂的部分。令人惊奇的是,您可以如命名/版本控制一样简单。这甚至使微软的产品命名看起来不错。

Editions

JRE - Java Runtime Environment. 这是用于运行JVM应用程序。您只能通过这种方式开发在JVM上运行的应用程序。

Java SE (JDK) - Java Standard Edition. 也称为JDK。这是您在JVM上开发应用程序所需的最低要求。

Java EE - Java Enterprise Edition. 名字已经非常清楚地说明了。这就是您所有的Enterprisey的东西,如分布式,大规模的应用程序。是的,不能更模糊。它包括Java SE。

Java ME - Java Micro Edition. 这是一个较小的子集,专注于手机和较小的设备。这就像.NET Micro Framework。

JavaFX- Swing的替代,它是/是Java中的主要GUI工具包。另外(虽然有争议的话题)也是针对RIA的。好像HTML / JS / CSS不够好吗?

你可以推断,所有的Java XY都是JDK的。

点击此处查看更多。

Versions

目前发布的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呢。其实,这里Java8意味着减去前面的1,所以同样的1.5表示Java 5. 1.6是Java 6. 1.7是Java 7。

安装Java

可以参考一下:http://www.jianshu.com/p/4a90505e448c

应用程序输出a.k.a工件(Application Output a.k.a Artifacts)

在.NET以及本地应用程序中,编译时通常会得到可执行文件和/或一系列DLL。使用Java,您可以在输出文件夹中获取一堆.class文件。每个类文件通常对应于Java类(当编译Java语言或编译为字节码时遵循约定的其他语言)。这些类是JVM字节码,它类似于CLR上的IL。

JAR文件

与其创建很多个类文件,不如创建一个JAR,它只不过是.class文件的压缩版本。您可以使用自己喜爱的工具创建JAR文件,或者直接运行:

jar cf jar-file input-file(s)

jar附带JDK(/ bin文件夹)。

WAR文件

WAR文件是由Sun创建的Web应用程序的JAR文件。它包含一堆类文件和一些额外的元数据和文件夹,其中包含诸如TomCat之类的Web服务器的信息。

运行Java应用程序

任何具有主类的Java应用程序都可以从命令提示符运行。类型:

java <class_containing_main_method>

你必须从.class文件的文件夹运行它。

类路径

运行应用程序时,JVM将查找当前文件夹中所有必需的依赖项,然后查找CLASSPATH环境变量,该变量指向包含.class文件或JAR / ZIP的一个或多个文件夹。您可以全局设置CLASSPATH环境变量,然后由Java使用它,或者在运行应用程序时将其作为命令行参数传递:

java <class_containing_main_method> -cp <class_path>

每个条目都用冒号分隔。

构建工具

在.NET中,有许多的构建工具例如MS Build, NAnt, Albacore, Fake 等等。而JVM也没有落后。虽然有许多的语言使用他们自己的构建工具,例如Clojure的Leiningen和Scala的SBT。大多数的语言(包括以前的)可以使用更多的标准构建工具。

Ant

这是XML,这是NAnt的基础。这很像MS-Build。

Maven

Maven更加地流行。当你看一个包含pom.xml工程文件的时候,这就是Maven。它同时也是XML。但是,Maven不仅仅是一个构建工具。这是一个包装系统。就像在NuGet的.NET,像NPM在Node.js.很像nuget.org,还有一个maven.org。并且类似于整个“如果不在nuget.org它不存在”,那么在Java生态系统中也是一样的情况。像NuGet一样,您还可以托管自己的Maven存储库。 Artifactory是一种允许您这样做的产品。

Gradle

Gradle是一个更好的Maven。它基于Groovy,所以你摆脱了可怕的XML,并提供了一个更好的管理依赖的方式。

IntelliJ IDEA 构建

虽然IDE和更多属于工具部分,IntelliJ IDEA还提供自己的构建系统。但是,您只能在了解它的环境中使用它,这基本上是IntelliJ IDEA和TeamCity。

*注:使用这个工具,我写过一篇文章,请看这里

框架和库

有太多的框架和库列出,所以我将简短地说明这一节。

JSON Serialization (JSON序列化)

简介:在JSON文本和.NET对象之间转换的最快方法是使用JsonSerializer。 JsonSerializer将.NET对象转换成JSON等价物,并将.NET对象属性名称映射到JSON属性名称并将其复制。

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

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

Unit Testing

相当多的单元测试框架:

JUnit- 作为标准。效果很好。几乎所有的工具都支持。

Spek- 免责声明。这是我自己的框架,但是由于我使用它,所以值得一提。提供更好的DSL。至少我觉得如此。

JBehave-Dan North’soriginal JBehave framework.

TestNG- 替代JUnit。

-----------------------------------分割线--------------------------------------------------

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容