概述
如果要追溯Java的发展,首先需要从 1991 年的 绿色(GREEN)
项目说起。这个项目是在 Email 特别盛行的时候提出来的,目的是使用Emil去控制各个家电产品的运行(有些类似于“物联网”概念),最早 SUN
公司的工程师打算使用 C++ 进行项目的开发,但是后来考虑到C++ 的复杂性,所以工程师使用 C++ 开发出了一个新的平台一 OAK(橡树)
平台。
OAK 是一种用于网络的精巧而安全的语言,主要的设计师是 詹姆斯·高斯林
(James Gosling),SUN 公司曾以此投标一个交互式电视项目,但结果被 SGI(硅图)
公司打败。于是当时的 OAK 几乎无家可归,恰巧这时 马克·安德里森
( Mark Andreesen)开发的 Mosaic
(马赛克)和 Netscape
(网景) 启发了 OAK 项目组成员,SUN 公司的工程师们用 Java 编写了 HotJava 浏览器
,得到了 Sun 公司首席执行官 史考特·麦克里尼
(Scott McNealy)的支持,触发了 Java 进军因特网 ( Internet)。
SUN 公司
斯坦福大学校园网 (Stanford University Network,SUN),于 1982 年成立,是一家主要从事硬件生产的公司,SUN公司在 2000 年的世界互联网低潮之后一直处于亏损状态,于是在 2009 年被 Oracle (甲骨文公司) 以每股9.5美元,总计74亿美元收购。
1995年SUN公司为了推广Java编程语言,正式将OAK更名为Java(咖啡),并且随着网络的发展,Java也开始更多地出现在互联网的项目开发中。java的发展历史可以归纳为如下3个阶段。
- 第一阶段(完善期):JDK1.0(1995年推出)~JDK1.2(1998年推出,Java更名为 Java 2)
- 第二阶段(平稳期):JDK1.3~JDK1.4
- 第三阶段(发展期):JDK1.5(2005年推出)~JDK1.7(被Oracle收购后推出)
Java语言从产生到现在,已经在许多方面对技术有着很好的支持,除了可以在网络上应用,在硬件上也有很好的支持。Java 在开发上分为 Java EE
(Java企业级开发)、Java SE
(Java标准版)、Java ME
(Java嵌入式开发)。
J2SE:Java2 Platform Standard Edition(2005年,之后图1-43个分支的关系更名为Java SE)。
该分支包含构成Java语言核心的类。比如:数据库连接、接口定义、数据结构、输入/输出、网络编程。
J2EE:Java2 Platform Enterprise Edition(2005年之后更名为Java EE)。
该分支Enterprise Edition(企业版) 包含J2SE中的所有类,并且还包含用于开发企业级应用的类。比如:EJB、Servlet、JSP、XML、事务控制,也是现在Java应用的主要方向,一些银行或电信的系统大多基于此架构。
J2ME:Java2 Platform Micro Edition(2005年之后更名为Java ME)。
该分支用于消费类电子产品的软件开发。比如:呼机、智能卡、手机、PDA、机顶盒。
Java SE是整个技术架构的核心
不管是 Java EE
还是 Java ME
技术,都是以 Java SE 基础作为支撑的,所以在整个学习过程中,Java SE 掌握的程度直接影响到日后的相关技术学习。在考试笔试中,问得最多的问题也是 Java SE 基础部分。
Java语言有许多有效的特性,吸引着程序员们,最主要体现在以下11个方面。
简洁有效
Java 语言是一种相当简洁的 面向对象
程序设计语言。Java 语言省略了 C++ 语言中所有的难以理解、容易混淆的特性,如头文件、指针、结构、单元、运算符重载、虚拟基础类等,因此 Java 语言更加严谨、简洁。
可移植性
对于一个程序员而言,写出来的程序如果不需修改就能够同时在 Windows、MacOS、UNIX 等平台上运行,简直就是美梦成真的好事。而 Java 语言就让这个原本遥不可及的事情越来越近。使用Java语言编写的程序,只要做较少的修改,甚至有时根本不需修改就可以在不同平台上运行。
面向对象
可以说,面向对象
是软件工程学的一次革命,大大提升了人类的软件开发能力,是一个伟大的进步,是软件发展过程的一个重大的里程碑。在过去的 30 年间,面向对象
有了长足的发展,充分体现了其自身的价值,到现在已经形成了一个包含 面向对象的系统分析
、面向对象的系统设计
、面向对象的程序设计
的完整体系。所以作为一种现代编程语言,是不能够偏离这一方向的,Java 语言也不例外。
解释型
Java 语言是一种 解释型语言 ,相对于 C/C++ 语言来说,用 Java 语言写出来的程序效率低,执行速度慢。但它正是通过在不同平台上运行 Java 解释器,对 Java 代码进行解释,来实现 一次编写,到处运行 的宏伟目标。为了达到这一目标,牺牲效率还是值得的,况且,现在的计算机技术日新月异,运算速度也越来越快,用户不会感到太慢。
适合分布式计算
Java 语言具有强大的、易于使用的联网能力,非常适合开发分布式计算的程序。Java 应用程序可以像访问本地文件系统那样通过 URL 访问远程对象。使用 Java 语言编写 Socket 通信程序 十分简单,使用 Java 语言比使用任何其他语言都简单。而且它还十分适用于公共网关接口(CGI)脚本的开发,另外还可以使用 Java小应用程序(Applet) 、Java服务器页面(Java Server Page,JSP)、Servlet等手段来构建更丰富的网页。
拥有较好的性能
正如前面所述,由于 Java 是一种解释型语言,所以它的执行效率相对就会慢一些,但由于 Java 语言采用了以下两种手段,使得其拥有较好的性能。
- Java语言源程序编写完成后,先使用 Java 伪编译器进行伪编译,将其转换为中间码(也称为字节码),再解释。
- Java语言提供了一种
准实时
(Just-in-Time,JIT)编译器,当需要更快的速度时,Java 语言可以使用 JIT 编译器将字节码转换成机器码,然后将其缓冲下来,这样速度就会更快。
健壮、防患于未然
Java语言在伪编译时,做了许多早期潜在问题的检查,并且在运行时又做了一些相应的检查,可以说是一种最严格的 “编译器”。它这种 “防患于未然” 的手段将许多程序中的错误扼杀在摇篮之中。经常有许多在其他语言中必须通过运行才会暴露出来的错误,在编译阶段就被发现了。另外,在 Java 语言中还具备许多保证程序稳定、健壮的特性,有效地减少了错误,这样使得 Java 应用程序更加健壮。
具有多线程处理能力
线程,是一种轻量级进程,是现代程序设计中必不可少的一种特性。多线程处理能力使得程序能够具有更好的交互性、实时性。 Java在多线程处理方面性能超群,具有让设计者惊喜的强大功能,而且在Java语言中进行多线程处理很简单。
具有较高的安全性
Java语言在设计时,在安全性方面考虑得很仔细,做了许多探究,所以Java语言成为目前最安全的一种程序设计语言。
是一种动态语言
Java是一种动态的语言,这表现在以下两个方面。
- 在Java语言中,可以简单、直观地查询运行时的信息。
- 可以将新代码加入到一个正在运行的程序中。
是一种中性结构
Java 编译器生成的是一种中性的对象文件格式。也就是说,Java编译器通过伪编译后,将生成一个与任何计算机体系统无关的 中性 的字节码。
这种中性结构其实并不是 Java 首创的,在 Java 出现之前,UCSD Pascal 系统就已经在一种商业产品中做到了这一点,另外在 UCSD Pascal 之前也有这种方式的先例,在尼克劳斯·沃斯 (Niklaus Wirth)实现的 Pascal 语言中就采用了这种降低一些性能,换取更好的可移植性和通用性的方法。
Java “中性”的字节码经过了许多精心的设计,使得其能够很好地兼容于当今大多数流行的计算机系统,在任何机器上都易于解释,易于动态翻译成为机器代码。
清楚了以上Java语言的主要特点后,下面再来看一下Java语言的运行机制。首先计算机高级语言类型主要有 编译型
和 解释型
两种,Java是两种类型的集合,Java中处理代码的过程如图所示。
关于编译型和解释型语言
如果从编程语言的角度而言,分为两种类型编程语言。
- 编译型:如果学习过C的同学应该知道,编译之后会形成出一个
*.exe
的文件,供用户使用。 - 解释型:像ASP语言那样,直接将代码放到服务器上进行解释执行。
可以发现,所有的 Java 程序文件的后缀都应该是 java
,而任何一个 java 程序首先必须经过编译,编译之后会形成一个 .class
的文件(字节码文件) ,而后在计算机上执行,但是解释程序的计算机并不是一台真正意义上的计算机,而是一台由软件和硬件模拟出来的计算机 —— * Java虚拟机Java Virtual Machine,JVM)* 。
在 Java 中所有的程序都是在 JVM 上运行的。Java 虚拟机(JVM)读取并处理经过编译的与平台无关的字节码 *.class
文件。Java 解释器负责将 Java 虚拟机的代码在特定的平台上运行。JVM基本原理如图所示。
Java 虚拟机的最大作用体现在平台的支持上,可以发现,所有要解释的程序都要在 JVM 上执行,并且由不同版本的 JVM 匹配不同的操作系统,这样只要 JVM 的支持不变,程序就可以任意地在不同的操作系统上运行。但是这种运行方式很明显没有直接运行在操作系统上性能高,不过随着硬件技术的发展,这些问题几乎可以忽略。