零基础学Java(第5版)
上QQ阅读APP看书,第一时间看更新

1.1 Java技术

Java既是编程语言也是软件平台,作为编程语言的Java有一套自己的机制,实现源程序到处理器可执行程序间的过渡与转换,作为软件平台,Java为程序员提供了编程接口和Java虚拟机(Java Virtual Machine,JVM),下面将依次介绍。

1.1.1 认识Java语言

Java作为一种高级语言具有许多优良特性,如跨平台、面向对象、分布式、多线程、安全性、健壮性、简单性等,这些优良的特性在读者学习完本书后会深有体会。

在Java语言中所有源代码都可以通过无格式的记事本编写,并保存为.java文件,因为通过该扩展名,Java编译器会知道该文件是自己可以处理的文件。经过编译后的文件为.class文件,该文件是字节码文件,此时.class文件不能被处理器直接读取执行,必须通过虚拟机转换成二进制文件,才可以被处理器执行。图1-1是Java程序的开发过程,整个过程说明了上面叙述的内容。

图1-1 Java程序的开发过程

Java是跨平台的高级编程语言,这里的平台是指操作系统平台,如Windows、UNIX、Mac、Linux等。使用Java语言编写的程序一次编译就可以在所有平台上运行,就是因为有Java虚拟机的存在。Sun公司(已被Oracle公司收购)提供了在各种操作系统平台上安装、运行的Java虚拟机,Java虚拟机可以执行.class文件。这样也就实现了众所周知的“一次编译,随处运行”的理想。图1-2演示了在不同平台上通过Java虚拟机执行Java程序的过程,从中可以清楚地理解Java虚拟机的作用。

图1-2 不同平台上通过JVM执行Java程序

注意 图1-2中的“HelloWorld.class”也代表一个应用程序,应用程序本身就是经过打包的.class文件的集合。并且在不同的平台上安装的JVM是不同的,需要到官方网站上下载适合自己机器操作系统平台的虚拟机。

1.1.2 认识Java平台

Java语言也是一种软件平台。平台可以理解为软件运行所需的软件或硬件环境,如操作系统可以看作软件平台,它提供了应用程序运行的环境,如在Windows操作系统上运行Word字处理程序。当然如果从用户的角度看,操作系统其实是软件和硬件相结合的综合平台,因为操作系统对硬件的操作用户是看不见的,但是操作系统又确实管理并运行在硬件平台上。

而Java语言作为软件平台,为Java源程序编写和运行提供了完善的环境。但是该Java提供的软件平台不与硬件发生任何关系,该平台是纯软件平台,运行在操作系统上。不同的操作系统编写了相应的JVM。作为软件平台的Java由两部分组成:

Java虚拟机:Java虚拟机是Java软件平台的基础,不同的操作系统平台对应不同的虚拟机。

Java应用编程接口(Java API):API是一套编写好的软件组件的集合,这些API按照功能通过包(package)来提供,包就是一系列具有相似功能的类和接口的集合。图1-3是Java虚拟机和应用编程接口与各种操作系统的软件层次关系。

图1-3 Java API和Java虚拟机

1.1.3 Java语言的功能

Java语言作为完善而强大的软件平台,每个版本都会提供如下的功能或组件。

1.开发工具

开发工具提供了诸如编译、执行、调试、文档化等功能,开发人员可以使用这些工具来编译、调试自己的程序。初学者经常使用的Java工具有Javac源程序编译工具、Java程序执行工具和Javadoc源程序文档化工具等,具体的功能将在本章后面介绍。读者将会了解如何使用Javac和其他Java工具。

说明 Javac编译工具其实就是在DOS下运行的一个命令,而DOS命令不区分大小写,所以本章有时候在DOS窗口中输入命令的时候,也直接说是javac命令。

2.应用编程接口

Java API提供了Java语言的核心功能,开发人员可以直接调用这些方法或实现其中的接口来满足自己程序设计的需要,如需要对数据进行排序或搜索,Java提供了具体的类来实现,开发人员只要了解这些类的基本功能和类中的方法就可以调用这些功能。读者可以翻阅JDK的HTML文档来搜索自己需要的功能。

3.用户接口工具集

其实这个工具集就是提供如何编写图形用户界面程序(即GUI程序),为应用程序提供一个友好的用户界面,任何复杂的程序界面都可以通过该工具集中的类或接口实现,具体请参看本书的第20章。

4.集成类库

该类库提供了集成工具来完成复杂的行为,如Java为访问数据库提供了JDBC API;为实现远程方法提供了Java RMI,该方法实现了对网络远端的Java程序的调用,是Java实现分布式计算的重要基础。

1.1.4 Java语言的优点

Java语言与其他语言(如C++、Delphi、C#等)相比,有自己的优势,无论你学习Java的初衷如何,Java语言确实使你的程序更友好,并且减少了你的工作量。下面将介绍Java语言的优点以证实上述说法。

1.入门更快

因为Java语言是一门强大的面向对象语言,所以只要理解面向对象技术(符合人类处理事情的思维方式),就很容易学习这门语言。如果读者已经学习过C++语言或C语言,将更容易进入Java世界。

2.代码量少,开发速度更快

同C++语言比较,同样的程序使用Java语言编写只需要较少的类和方法。Java语言比C++语言简单,相同功能的程序需要更少的代码行。

3.编码更容易

Java语言提供良好的编码规范,使得Java语言编写的程序具有统一的“外表”,并且Java支持垃圾回收机制(GC),所以不会像C++中那样出现内存泄漏的问题,这样开发人员就可以集中精力编写程序所需的类,而不用考虑何时、如何回收这些类对象了,只要在需要时创建对象即可,其他操作都由GC处理。Java的面向对象特性、JavaBeans组件架构和功能强大的API,都使得开发人员可以容易地重用经过严格测试的代码,这些API的使用也减少了程序中Bug的数量。

4.避免平台依赖,程序的平台独立性

Java语言编写的类库可以在其他平台上的Java应用程序中使用,而不像C++语言那样必须依赖于Windows平台。Java源程序被编译成字节码,字节码通过操作系统平台上的JVM来解释而获得运行,这样使用Java语言编写的程序不依赖于特定的平台,实现“一次编写,随处运行”。

1.1.5 Java分布式应用和多线程的特点

本节讲述Java程序的分布式和多线程的特点。分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络的不同主机上,操作分布是指把一个计算分散在不同的主机上处理。

Java支持客户端/服务器计算模式,因此它支持这两种分布。对于数据分布,Java提供了一个叫作URL的对象,利用这个对象,可以打开并且访问具有相同URL的对象,访问方式与访问本地文件系统相同。对于操作分布,Java的Applet小程序可以从服务器下载到客户端,即部分计算在客户端进行,提高系统执行效率。有关分布式的原理如图1-4所示。

图1-4 分布式示意图

Java提供了一整套网络类库,开发人员可以利用这些类库进行网络程序设计,方便地实现Java的分布式特性。

线程是操作系统的一种新概念,线程又被称作轻量进程,是比传统进程更加小的并且可以并发执行的单位。Java提供了多线程的支持。

Java在两方面支持多线程。一方面,Java环境本身就是多线程的。若干个系统线程运行,负责必要的无用单元回收、系统维护等系统级操作;另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序的开发。

Java提供了一个Thread类,由它负责启动、运行、终止线程,并且可以检查线程状态。Java线程还包括一组同步原语,这些原语负责对线程实行并发控制。利用Java的多线程编程接口,开发人员可以方便地写出支持多线程的应用程序,从而提高程序执行的效率。Java的多线程在一定程度上受运行时所在平台的限制,如果操作系统不支持多线程,那么Java程序的多线程特性就不能表现出来。

1.1.6 Java程序的可靠性、安全性

本节将详细讲述Java的可靠性和安全性。Java最初的设计目的是针对电子类消费品中的应用,因此要求较高的可靠性。Java虽然源于C++,但它消除了C++的许多不可靠的因素,可以防止许多编程错误。

它的可靠性和安全性表现在如下几点:

Java是强类型的语言,要求显式的方法声明。这保证了编译器可以发现方法调用错误,保证程序更加可靠。

Java不支持指针,这杜绝了内存的非法访问。

Java的自动单元收集功能,可以防止内存“丢失”等动态内存分配导致的问题。

Java解释器运行时实施检查,可以发现数组和字符串访问越界的问题。

Java提供了异常处理机制。

由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载执行程序就非常危险。Java通过自己的安全机制,防止了病毒程序的产生,以及下载程序对本地系统的威胁破坏。

当Java字节码进入解释器时,首先必须经过字节码校验器的检查,然后Java解释器将决定程序中类的内存布局。随后,类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰和破坏。最后,客户端用户还可以限制从网络上装载的类只能访问某些文件系统。上述几种机制结合起来,使得Java成为安全的编程语言。