1.1 Java的版本
目前Java有三大不同版本:J2ME、J2SE和J2EE。它们的侧重点各有不同,现将其列举如下:
(1)J2ME(Java 2 Micro Edition)是Java的微型版,常用于嵌入式设备上的开发。
(2)J2SE(Java 2 Standard Edition)是Java的标准版用于针对普通PC的标准应用程序开发。
(3)J2EE(Java 2 Enterprise Edition)是Java的企业版,用来针对企业级应用程序的开发。
J2ME、J2SE和J2EE是Java针对不同应用而提供的不同服务,也就是提供不同类型的类库,对于初学者而言,都是从J2SE入手的。
J2SE也是J2ME和J2EE的基础。事实上,大部分非企业级软件都是在J2SE上开发部署。首先,这是因为很多应用软件都是在J2SE上开发的;其次,J2SE和J2EE是兼容的,企业版是在标准版上的扩充,在J2SE的版本上开发的软件,拿到企业版的平台上也可以运行;再次,通常的手机及嵌入式设备的应用开发也还是在J2SE的环境中完成的,因为毕竟J2ME提供的只是微型版的一个环境,我们完全可以在J2SE上将这个环境虚拟出来,然后将开发出来的应用软件拿到微型版的实际环境中运行。
作为J2SE,Java编写的程序有两种类型:Java应用程序(Java Application)和Java小应用程序(Java Applet)。作为教学,本书主要讲解、学习第一种程序的描述方法。
1.2 Java的特点
1、 简单性
就高级语言而言,进而对Java 程序设计语言而言,对初学者来讲都是复杂、难学的。所谓简单是把Java与诸如C、C++等高级语言相比较而言的。例如:
(1)Java中许多基本语句的语法和C一样,像常用的循环语句,控制语句等,这对于学过C的读者是一个优势。
(2)Java基本语句的语法要比C简单,C中许多容易混淆的概念或被Java弃之不用,或以一种更清楚、更容易理解的方式来实现。如Java没有指针的概念。
(3)运算符重载一直被认为是一种优秀的、面向对象的多态机制的体现,但由于考虑到它会使程序变得难以理解,所以Java没有提供运算符重载的实现方式。
(4)Java只支持单一继承,避免了多重继承中数据继承的二义性问题,使程序结构清晰、明了,增强了程序的“可读性”,提高了“可维护性”。
Java语言简练,读者随着学习的深入,自然会有深切体会。
2、面向对象
程序设计语言的发展大致经历了面向数据、面向过程、面向结构这几个历程,随着软件业的发展,诞生了面向对象的程序设计方法,出现了如Java这样的面向对象程序设计语言。面向对象技术具有三大特征:
(1) 封装性
类的细节被以类的形式封装起来,这里的细节就是类的成员,它可以是数据,也可以是操作这些数据的方法(函数),这些数据和方法通过访问权限,像是被隐藏起来一样(如同一个集成电路块,有输入、输出的脚线,但不知里面的具体实现线路)。这就是类的封装性。封装性的好处就是最大限度的实现了数据保密和保护,最大限度地降低了在外部对类的内部进行的干扰和破坏,提高了类的安全性。
(2) 继承性
类是可以继承的,就像遗产一样。通过继承可以大大提高程序的可复用性,提高程序的开发效率,同时也能降低系统的复杂性,提升代码的可读性。
(3) 多态性
多态性是指程序在一种基本状态下,可以有多种的实现状态。Java的多态分为“静态”多态和“动态”多态。
关于面向对象技术的三大特征知识将会在后面章节中结合Java语法的实现,再作进一步介绍。
在众多的面向对象高级语言中,相对而言Java是真正意义上的面向对象编程语言。
不过读者要注意,面向对象的程序设计方法与面向对象的编程语言是两个不同的概念:面向对象的程序设计不一定非得用面向对象的语言才能实现,反过来,用面向对象的编程语言编写的程序也未必就是面向对象的。以面向对象的思想进行程序设计,并用面向对象的编程语言进行开发是当今软件开发领域最应当具有的模式。
3、分布式
分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络的不同主机上,操作分布是指把一个计算分散在不同主机上处理。Java支持WWW客户机/服务器计算模式,因此它支持这两种分布性。对于前者,Java提供了URL的对象,可以打开并访问具有相同URL地址上的信息。对于后者,Java可以从服务器下载到客户端,提高系统执行效率。 Java提供了一整套网络类库,可以使开发人员方便地利用类库进行网络程序设计,实现Java的分布式特性。 所以也把Java称为“网络时代”的计算机语言
4、健壮性
现今的Java语言主要用于网络应用程序的开发,因此对安全性有很高的要求。Java语言在很大程度上避免了病毒程序的产生和网络程序对本地系统的破坏,具体有:
(1) 取消指针数据类型,避免了对内存的非法访问。
(2) 垃圾自动回收机制,使程序员专注于程序的开发。更重要的是,可以很好地确保内存管理的正确性,避免出现“内存泄露”现象。
(3) Java语言提供了异常处理机制,最大限度的避免了程序错误导致的程序执行夭折。
5、多线程
操作系统中具有进程概念,例如一边听音乐一边编辑Word文档。所以每个运行中的程序都是一个进程。为了进一步提高程序的执行效率,Java又引入了线程的概念。进程是由操作系统分配给各运行程序的CPU运行时间,而线程则是把系统分给Java的CPU的时间再进行细分给Java相关程序段。进程的调度权在操作系统,线程调度权在Java。线程可以只有一个,也可以具有多个。多线程的目的就是通过将大程序划分为多个小程序,让小程序们“同时”并发执行,提高程序的执行效率。
6、跨平台
(1) 跨平台的意义
在Java出现以前计算机应用历史时期内,有一个问题一直困扰着软件工程科学家:一个在苹果微型机上运行的软件不能在IBM-pc机上正常运行,即同样的程序不能在不同平台上运行。这就是计算机软件的平台相关性问题。这种平台相关性造成了软件的重复投资,降低了开发效率。多少年来软件工程的科学家为了解决这个问题可以说费尽了周折却无法获得突破性的进展。
Java的产生和使用最大限度的解决了这个问题(并不是完全解决了这个问题)。Java通过先“编译”,后“解释”的运行方式支持在任何平台上实现了“独立于所有其它软硬件”而运行,不管操作系统是Windows、Linux、Unix还是Macintosh,也不管机器是大型机、小型机还是微机,甚至是平板电脑或者手机、智能家电等,只要在这些平台上都装有相应版本的JVM, Java程序就都能运行。现在很多手机都支持Java,大多数手机游戏、动漫也都可以用Java开发,这样任何支持Java的手机都能玩这些游戏。
平*立保证了软件的可移植性,而软件的可移植性是软件开发中减少重复投资、提高开发效率的重要技术。是Java真正实现了软件的可移植性。用Java开发的软件保证了程序在不同的平台无需再移植就可直接使用。全世界软件工程科学家在评论Java的“跨平台性”时都不吝笔墨、高度评价,有的甚至称其为“是软件界一直在追求、企盼的、但以前从未实现过的技术。是软件技术的革命性突破,是里程碑式的成果”。
(2) 跨平台实现的原理
Java能够实现跨平台运行的关键是Java系统有一个其它高级语言所没有的Java虚拟机 (JVM)。JVM是用软件模拟的计算机。它的运行过程是这样的:通过JVM先把源程序 “编译”成统一的JVM字节码,后经JVM 把字节码“解释”成本地的机器码,付诸运行,产生结果。如图1-1所示。
当然,由于Java程序在运行前要经过两道预处理,所以耗费了一些时间,这是Java的“短处”。但目前一方面硬件速度在不断加快,另一方面SUN公司也研制了Java芯片,不但提高了Java速度而且也使Java更容易嵌入到家用电器中。
图1-1 Java运行原理图