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单元测试

单元测试框架:

Mocking 框架

 

日志

  • SLF4J - 这是一个比较普遍的日志框架。允许你代码运行时的记录输出,可以开启和关闭.

IoC容器

  • Guice - 来自Google.
  • Spring - Spring框架。.
  • PicoContainer

HTTP客户端

使用标准的Apache Commons,

Web框架

许多Web框架都是基于 Java Servlet API. 类似OWIN.

应用可以运行在容器 GlassFishJettyApache TomCat.WildFly

一个现代轻量的web开发是Vert.x. 基于 Netty,你能够使用其他语言如Java, JavaScript, Ruby.本站vertx介绍

网络

其他库包

约定

每个语言都有自己的约定规则

名称空间Namespaces

Namespaces是域名的反过来,如

org.jdon.xxx  

对应不同的目录。

Property属性和方法名称

如果你以前用过C#,现在使用 Java, Scala or Kotlin, 他们都是有小写字母,如果xxx是字段名,那么setXxx和getXxx是其方法,在Scala中节省了这两个方法。

工具

当你安装了JDK以后,你有一个编译器 (javac) 和一个jar 创造器 (jar), javadoc (创建文档) 。

IDE

有三个主要开发工具

这三个都是OSS且免费, Eclipse是使用最广泛的。

持续集成

.

随机工具

.

  • JRebel - 编码无需编译,直接与性能。
  • YourKit - Java Profiler

IntelliJ IDEA for the Visual Studio User

 

Conferences

:

  • Devoxx - 最大会议.
  • JAX - 德国长期举办大型会议
  • JavaZone - 这就像NDC但是Java的
  • JavaOne - SUN和Oracle举办最大的。

使用Gradle建立一个Java项目

JVM内存模型和性能优化

Java面试题