Java企业教程系列
针对.NET程序员的Java基础指南
本指南是什么
本指南针对.Net程序员或有其他编程经验的程序员,当你从一个类似的平台来到一个新的平台,你肯定想加快速度了解你已经知道的一些概念/框架,但因为他们取了不同的名称或不同的方法可能就不知道。这个了解过程是耗时的且令人沮丧。本指南是为了帮助那些被各种新手问题困扰的老程序员快速掌握Java/JVM平台。
目标受众
虽然标题说:“针对.NET程序员”,本指南是针对那些对他们来说JVM是一个新平台的任何人。虽然会有一些与.NET平台比较,它不完全是针对.NET开发人员。Java程序员也可以通过这个指南了解.NET的相对应概念。
基础
Java语言 Java生态 Java的JVM.
这三者是不同的,第一个是指语言(比如C#),第二个指的是一种生态系统(想想,净化生态系统),第三个指的是一个平台(想想CLR)。不幸的是,似乎Java通常用来指这个所有三个。很多人不喜欢Java这门语言,但是Java的生态系统非常活跃,大量的创新正在其中发生。事实上,作为一个.NET开发人员你可能熟悉的一些库包,如NHibernate,NUnit,NAnt等所有这些都源于Java生态系统。
多语言平台
将JVM看成是CLR. 两个都是虚拟机,提供一种多语言的平台,他们还是有区别的,在CLR上我们多数运行的是C#, VB.NET和 F#, 而在JVM上有 Java, Scala, Clojure, Ceylon, Groovy, JRuby 和Kotlin,很多见 name a few.
JVM字节码
JVM 字节码bytecode是基于JVM语言编译后运行在JVM的代码,它类似 .NET的IL .
跨平台
JVM是100%跨平台. 包括Windows, OSX 和 Linux, 还有其他很多设备。
JVM实现 版次和版本
JVM 有多种实现 multiple implementations. 最通用的是Oracle 和OpenJDK. 甚至有一个.NET实现:a .NET implementation called IKVM.NET
版次和版本
这可能是迄今为止本指南上最复杂的部分。令人惊讶的是他们竟然搞砸了一些简单的命名/版本控制。相比而言,微软的产品命名看起来体面漂亮多了。
版次Editions
- JRE - Java Runtime Environment. 这是用来运行JVM应用,如果没有这个,你编写的应用无法运行。.
- Java SE (JDK) - Java Standard Edition. 也就是JDK. 这也是你开发JVM应用必备的。.
- Java EE - Java Enterprise Edition. 名字说明了一切。这就是你得到所有的有关企业开发所需的东西,如分布式,大规模应用。它也包括Java SE。
- Java ME - Java Micro Edition. 这是一个针对移动手机和小设备的子集,类似.NET Micro Framework.
- JavaFX - Swing的替代, 是一种主要的GUI 工具toolkit . 也是瞄准RIA,远程富客户端。.
版本
Java 7. Java 8等表示版本,通过下面命令获得版本:
java -version
你会看到如下提示:
java version "1.7.0_40" Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)
这是 Java 7. 显示的是 1.7.0_40,Java从1.6以后搞怪,去掉了前面1,号称Java 6或Java 7。
1.5 意味 Java 5. 1.6是Java 6. 1.7是 Java 7, Java 8是 1.8.
大概SUN公司就是这么折腾死的。
安装 Java
一旦你确定学习哪个版本和版次,到install guide page.下载安装。
.
应用程序输出文件
正如.NET应用是一个原生native应用, 有一个可执行文件和一系列 DLLs. 而在Java, 你会在输出目录得到很多.class文件
每个class文件对应一个a Java class类 这些类是JVM 字节码bytecode, 类似.NET的 IL
JAR 文件
相比交付一大堆class文件,你能够创建一个JAR包文件,其实是这些.class文件的压缩文件。可以使用如下工具创建压缩包。
jar cf jar-file input-file(s)
jar是位于 JDK (/bin 目录下).
WAR 文件
一个 WAR文件是一个 JAR文件,但是专门服务于 Web 应用程序, created by Sun.它包含一系列class文件,一些附加的元数据和Web信息,用于 TomCat这样的服务器识别。
运行 Java应用程序
任何Java应用都有一个主类,能够从操作系统的命令如下运行:
java <包含main方法的类>
你必须在.class文件所在的目录运行这个命令。
Classpath
当运行应用程序时,JVM会在当前目录和CLASSPATH环境中寻找需要的依赖包,CLASSPATH环境变量指向那些包含.class文件的目录或JAR包.
你能够设置CLASSPATH环境全局变量。,运行时如下::
java <包含主方法的类> -cp <class_path路径>
如果class路径中有多个,使用冒号隔开。
构建工具 Tools
在 .NET中有需要构建工具如MS Build, NAnt, Albacore, Fake等等,JVM如下:.
Ant
它是一个XML. 也是NAnt的发展来源,它像MS-Build. 用来编译Java源码 打包JAR或WAR等,可以参考其他项目的原有的xml模板自己修改,从零编写比较麻烦。
Maven
Maven是一个很流行的工具,当你看到一个项目中有pom.xml 文件,那就是 Maven. Maven is also broken. Maven配置文件也是XML.
Maven不只是构建工具,不只是打包系统成JAR或WAR,它类似.NET中的NuGet ,类似Node.js的NPM. 正如nuget.org ,Maven有一个中央仓库 maven.org. 如果在这些仓库中不存在你所需要的依赖包,那么这些依赖包真的就不存在了,这是组件Java生态系统的重要途径。.
如果NuGet, 你可以构建你自己的Maven仓储 repostiory. Artifactory 是一个这样的工具。
Gradle
Gradle比Maven要好些,它是基于Groovy,这样你避免了烦人的XML配置,提供了一种更好的管理依赖的方式。
IntelliJ IDEA Build
IDE也提供一种构建方式,但是只是限制在它的环境内。.
框架和库包
JSON 序列化
- Jackson - 它是其中一个,在JavaEE7中,Json由服务器自动完成。
Unit单元测试
单元测试框架:
- JUnit - 一个标准的单元测试。
- Spek - 提供较好的DSL.
- JBehave - Dan North’s 原始 JBehave 框架,行为驱动开发框架
- TestNG - JUnit的候选者.
Mocking 框架
日志
- SLF4J - 这是一个比较普遍的日志框架。允许你代码运行时的记录输出,可以开启和关闭.
IoC容器
HTTP客户端
使用标准的Apache Commons,
- Apache HTTP Client - 最好采取异步客户端。.
Web框架
许多Web框架都是基于 Java Servlet API. 类似OWIN.
应用可以运行在容器 GlassFish, Jetty, Apache TomCat.WildFly
一个现代轻量的web开发是Vert.x. 基于 Netty,你能够使用其他语言如Java, JavaScript, Ruby.本站vertx介绍
网络
其他库包
- JodaTime - 日期时间管理。.
- Reflections - 使得反射更好
- Apache Commons - 通用库包。
约定
每个语言都有自己的约定规则
名称空间Namespaces
Namespaces是域名的反过来,如
org.jdon.xxx
对应不同的目录。
Property属性和方法名称
如果你以前用过C#,现在使用 Java, Scala or Kotlin, 他们都是有小写字母,如果xxx是字段名,那么setXxx和getXxx是其方法,在Scala中节省了这两个方法。
工具
当你安装了JDK以后,你有一个编译器 (javac) 和一个jar 创造器 (jar), javadoc (创建文档) 。
IDE
有三个主要开发工具
这三个都是OSS且免费, Eclipse是使用最广泛的。
持续集成
.
随机工具
.
IntelliJ IDEA for the Visual Studio User
Conferences
: