名师讲坛:Java开发实战经典(第2版)
上QQ阅读APP看书,第一时间看更新

1.1 认识Java

Java是一门编程语言,由于Java使用了大多数开发者较为习惯的编程模式,以及自身结构的良好设计,使得Java成为世界上最炙手可热的编程语言,本节将带领读者一起走进Java的世界,回顾Java的发展历史。

1.1.1 什么是Java

Java是Sun(全称为:Stanford University Network,1982年成立,Sun公司的原始logo如图1-1所示)公司开发的一套编程语言,主设计者是James Gosling(如图1-2所示),最早来源于一个叫Green的项目,是为家用电子消费产品开发的一个分布式代码系统,用于通过网络对家用电器进行控制。最初,Sun的工程师们准备采用C++,但由于C++过于复杂并且安全性差,最后决定基于C++开发一种新语言Oak(Java的前身,1991年出现),Oak是一种用于网络的精巧而安全的语言,Sun公司曾以此投标一个交互式电视项目,结果被SGI打败。于是当时的Oak几乎“无家可归”,恰巧这时Marc Andreessen开发的Mosaic和Netscape启发了Oak项目组成员,Sun的工程师们用Java编制了HotJava浏览器,得到了Sun公司首席执行官Scott McNealy的支持,触发了Java进军Internet。

图1-1 Sun公司的原始logo

图1-2 James Gosling

提示

关于Oracle收购Sun公司。

如果熟悉Oracle公司历史的读者应该清楚:Oracle一直以Microsoft为对手,所以Oracle最初的许多策略也都是与微软有关,而这两家公司也都致力于企业办公平台的技术支持。对于整个企业级系统开发其核心有四个组成部分:操作系统、数据库、中间件、编程语言。而Oracle收购Sun公司得到了Java后就立即拥有了庞大的开发群体,这一点要比微软的.NET更多。而随后的Oracle又收购了BEA公司得到了用户群体众多的Weblogic中间件,使得Oracle公司具备了完善的企业平台支持的能力。

Java语言从诞生开始到今天经历了一系列的发展过程,而其开发工具集JDK也不断发展,发展过程如表1-1所示。

表1-1 JDK发展过程

Java语言从最初设计时就综合考虑了嵌入式系统以及企业平台的开发支持,所以在实际的Java开发过程中,其主要有3种开发方向,如表1-2所示。

表1-2 Java开发方向

虽然Java语言发展方向有3个,但是这3个发展方向中最核心的部分就是JAVA SE,而JAVA ME和JAVA EE也是在JAVA SE基础之上发展起来的,3种技术的关系如图1-3所示。

1.1.2 Java语言特点

Java语言有许多有效的特性,吸引着程序员们,最主要的有以下几个。

1.简洁有效

Java语言是一种相当简洁的“面向对象”程序设计语言。Java语言省略了C++语言中所有的难以理解、容易混淆的特性,例如头文件、指针、结构、单元、运算符重载、虚拟基础类等。它更加严谨、简洁。

图1-3 3种技术的关系

2.可移植性

对于一个程序员而言,写出来的程序如果不需修改就能够同时在Windows、MacOS、UNIX等平台上运行,简直就是美梦成真,而Java语言就让这个原本遥不可及的事越来越近了。使用Java语言编写的程序,只要做较少的修改,甚至有时根本不需修改就可以在不同平台上运行了。

3.面向对象

可以这么说,“面向对象”是软件工程学的一次革命,大大提升了人类的软件开发能力,是一个伟大的进步,是软件发展的一个重大的里程碑。

在过去的30年间,“面向对象”有了长足的发展,充分体现了其自身的价值,到现在已经形成了一个包含了“面向对象的系统分析”、“面向对象的系统设计”和“面向对象的程序设计”的完整体系。所以作为一种现代编程语言,是不能够偏离这一方向的,Java语言也不例外。

4.解释型

Java语言是一种解释型语言,相对于C/C++语言来说,用Java语言写出来的程序效率低,执行速度慢。但它正是通过在不同平台上运行Java解释器,对Java代码进行解释,来实现“一次编写,到处运行”的目标。为了达到目标,牺牲效率还是值得的,况且,现在的计算机技术日新月异,运算速度也越来越快,用户不会感到太慢。

5.适合分布式计算

Java语言具有强大的、易于使用的联网能力,非常适合开发分布式计算的程序。Java应用程序可以像访问本地文件系统那样通过URL访问远程对象。

使用Java语言编写Socket通信程序比使用任何其他语言都简单。而且它还十分适用于公共网关接口(CGI)脚本的开发,另外还可以使用Java小应用程序(Applet)、Java服务器页面(Java Server Page,简称JSP)、Servlet等手段来构建更丰富的网页。

6.拥有较好的性能

由于Java是一种解释型语言,所以它的执行效率相对会慢一些,但由于Java语言采用了下面两种手段,其性能还是不错的。

(1)Java语言源程序编写完成后,先使用Java伪编译器进行伪编译,将其转换为中间码(也称为字节码),再解释。

(2)提供了一种“准实时(Just-in-Time,JIT)”编译器,当需要更快的速度时,可以使用JIT编译器将字节码转换成机器码,然后将其缓冲下来,这样速度就会更快。

7.健壮、防患于未然

Java语言在伪编译时,做了许多早期潜在问题的检查,并且在运行时又做了一些相应的检查,可以说是一种最严格的“编译器”。

它的这种“防患于未然”的手段将许多程序中的错误扼杀在摇篮之中。经常有许多在其他语言中必须通过运行才会暴露出来的错误,在编译阶段就被发现了。

另外,在Java语言中还具备了许多保证程序稳定、健壮的特性,有效地减少了错误,也使得Java应用程序更加健壮。

8.具有多线程处理能力

线程,是一种轻量级进程,是现代程序设计中必不可少的一种特性。多线程处理能力使得程序能够具有更好的交互性、实时性。

Java在多线程处理方面性能超群,具有让设计者惊喜的强大功能,而且在Java语言中进行多线程处理很简单。

9.具有较高的安全性

由于Java语言在设计时,在安全性方面考虑很仔细,做了许多探究,使得Java语言成为目前最安全的一种程序设计语言。

尽管Sun公司曾经许诺过:“通过Java可以轻松构建出防病毒、防黑客的系统”,但就在JDK(Java Development Kit)1.0发布不久后,美国Princeton(普林斯顿)大学的一组安全专家发现了Java 1.0安全特性中的第一例错误。从此,Java安全方面的问题开始被关注。不过至今所发现的安全隐患都微不足道,而且Java开发组还宣称,他们对系统安全方面的Bugs非常重视,会对这些被发现的Bugs立即进行修复。另外由于Sun公司开放了Java解释器的细节,所以有助于通过各界力量,共同发现、防范、制止这些安全隐患。

10.是一种动态语言

Java是一种动态的语言,这表现在以下两个方面:

(1)在Java语言中,可以简单、直观地查询运行时的信息。

(2)可以将新代码加入到一个正在运行的程序中去。

11.是一种中性结构

Java编译器生成的是一种中性的对象文件格式,也就是说,Java编译器通过伪编译后,将生成一个与任何计算机体系统无关的“中性”的字节码。

这种中性结构其实并不是Java首创的,在Java出现之前UCSD Pascal系统就已在一种商业产品中做到了这一点,另外在UCSD Pascal之前也有这种方式的先例,在Niklaus Wirth实现的Pascal语言中就采用了这种降低一些性能,换取更好的可移植性和通用性的方法。

Java的这种字节码经过了许多精心的设计,使其能够很好地兼容当今大多数流行的计算机系统,在任何机器上都易于解释,易于动态翻译成机器代码。

1.1.3 Java程序的运行机制和Java虚拟机

计算机高级语言类型主要有编译型和解释型两种,Java是两种类型的集合,Java中处理代码的过程如图1-4所示。

图1-4 Java程序的运行机制

从图1-4中可以看出,在Java中源文件名称的扩展名为*.java,之后通过编译使*.java的文件生成一个*.class文件,在计算机上执行*.class文件,但是此时执行*.class的计算机并不是一个物理上可以看见的计算机,而是Java自己设计的一个计算机—Java虚拟机(JVM,Java Virtual Machine),Java也是通过JVM进行可移植性操作的。

在Java中所有的程序都是在JVM上运行的。JVM是在一台计算机上由软件或硬件模拟的计算机。JVM读取并处理经编译过的与平台无关的字节码class文件。Java解释器负责将JVM的代码在特定的平台上运行。JVM的基本原理如图1-5所示。

图1-5 JVM基本原理

从图1-5中可以发现,所有的*.class文件都是在JVM上运行,即*.class文件只认JVM,由JVM去适应各个操作系统,如果不同的操作系统安装上符合其类型的JVM,那么以后程序无论到哪个操作系统上都是可以正确执行的。

提示

关于Java可移植性的简单理解。

有些读者可能很难理解以上的解释,其实这个过程就类似于下面的一种情景:

现在有一个中国富商,他同时要跟美国、韩国、俄罗斯、日本、法国、德国等几个国家洽谈生意,可是他不懂这些国家的语言,所以他针对于每个国家请了一个翻译,这样他以后的话就只对翻译说,不同的翻译会将他说的话翻译给不同国家的客户,这样富商只需要说一句中文给翻译,那么就可以同各个国家的客户沟通了。