Java概念澄清
刚接触Java的同学,好多会对Java的各种术语绕昏头,我们先对一下术语进行解释。
语言和平台
Java是语言和平台的双重角色,这是现代Java的核心。在使用Java之前,我们要先弄清楚Java语言和Java平台之间的区别与联系
- Java语言 Java语言是静态类型、面向对象的语言是人类可读的。
- Java平台 平台提供运行时1的软件。Java虚拟机(JVM)负责把类文件形式(人类不可读)的代码链接起来并执行。JVM不能解释Java语言的源文件,你要先把源文件转换成类文件
他们之间的联系可以用一张图表示:
上图Java源码被转换成 .class 文件,在JIT编译前被加载处理
图中文字 Class loader:类加载器;Transformed .class:转换后的.class;Executing code:可执行代码;Interpreter:解释器;JIT compiler:JIT编译器;Machine code:机器码
连接Java语言和平台的纽带是统一的类文件(.class)格式文件。
如图所示,这是Java代码的演进过程。从我们可以看懂的Java源码开始,然后由javac编译成.class文件,变成可以加载到JVM中的形式。值得注意的是,类文件在加载过程中通常都会被处理和修改。大多数流行框架(特别是打着“企业级”旗号的)都会在类加载过程中对类进行改造。
Java是编译型语言还是解释型语言?
大多数开发人员都知道,Java源文件需要编译成.class文件才能在JVM中运行。如果继续追问,许多开发人员还会告诉你说.class中的字节码首先会被JVM解释,但在稍后即时(JIT)编译。然而很多人将字节码含糊地理解为“在某种虚构的或简化的CPU上运行的机器码”。
实际上,JVM字节码更像是中途的驿站,是一种从人类可读的源码向机器码过渡的中间状态。用编译原理术语讲,字节码实际上是一种中间语言(IL)形态,不是真正的机器码。也就是说,将Java源码变成字节码的过程不是C或C++程序员所理解的那种编译。Java所谓的编译器javac也不同于gcc,实际上它只是一个针对java源码生成类文件的工具。Java体系中真正的编译器是JIT,如图1-1所示。
有人说Java是“动态编译”的,他们所说的编译是指JIT的运行时编译,不是指构建时创建类文件的过程。
所以如果被问及“Java是编译型语言还是解释型语言”,你可以回答“都是”
Java版本
Java现在已不仅仅是一种语言,从广义上说,它代表了语言和平台的总称。并根据应用方向的不同主要分为Java SE、Java EE和Java ME的3个部分。
Java是Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。由当时任职太阳微系统的詹姆斯·高斯林(James Gosling)等人于1990年代初开发,它最初被命名为Oak。于1995年5月以Java的名称正式发布。
特别的、在1998年12月份Sun公司公布的Java 1.2版本,以为这个版本改动较大,所以同时将它的名字改称为Java 2
Java发布的版本顺序是1.0、1.1、22、53、6、7、8、9
Release | 更新年份 |
---|---|
JDK Beta | 1995 |
JDK 1.0 | 1996 |
JDK 1.1 | 1997 |
J2SE 1.2 | 1998 |
J2SE 1.3 | 2000 |
J2SE 1.4 | 2002 |
J2SE 5.0 | 2004 |
Java SE 6 | 2006 |
Java SE 7 | 2011 |
Java SE 8 | 2014 |
Java SE 9 | 2017 |
Java SE 10 (18.3) | 2018 |
什么是Java SE、JavaEE、Java ME
JavaN可以和和Java SE N看作是一回事。(如Java8 == Java SE 8)
以Java应用层面区分:
在Java 5.0(或者称为1.5)版本推出后,为了避免版本混淆,便将J2SE、J2EE和J2ME改称为Java SE 5、Java EE 5和Java ME 5,后续版本只变更相应版本号,例如Java EE 6。
- J2SE为创建和运行Java程序提供最基本环境,是Java技术的核心和基础。
- J2EE为基于服务器的分布式企业应用提供开发和运行环境,是目前Java技术应用最广泛的部分。J2EE不仅继承了J2SE中的许多优点,同时还提供了对EJB、JSP、Servlet以及XML技术的全面支持,降低了企业级开发的复杂度。
- J2ME为嵌入式应用提供开发和运行环境,例如手机程序和PDA程序等。
什么是JRE、JDK
JDK包含JRE。Java JDK(Java Development Toolkit/Java开发工具箱),如果只是运行Java程序,我们只需要安装Java JRE软件就可以了,如果你是程序员要开发Java程序,你就需要JDK了。他包含了你开发时需要的工具,如编译器。
参考资料
《Java程序员修炼之道》
外部链接
Java 编程入门
Java SE Naming and Versions
java-jdk-sdk-se
java版本历史
Java 运行时环境(JRE;也称为 Java 运行时)包含 JVM、代码库和运行以 Java 语言编写的程序所必要的组件。JRE 可用于多种平台。您可依据 JRE 许可条款,在您的应用程序中自由地重新分发 JRE,为应用程序的用户提供一个运行您的软件的平台。JRE 包含在 JDK 中。↩
从1.2到1.4的Java版本都被称作Java2。全称叫做Java 2 Software Development Kit, 或者Java 2 SDK 又或 J2SDK。它的后续,版本也通常被称为“Java 2标准版”(J2SE)。在J2SE的推出的同时还推出了“Java 2微缩版”(J2ME)和“Java 2企业版”(J2EE)。↩
Java5、Java6、Java7、Java8、Java9也可以叫做Java1.5、Java1.6、Java1.7、Java1.8、Java1.9↩