Java语言源于1991年Sun Microsystem(太阳计算机系统,简称Sun公司)公司内部一项名为Green的开发计划,是为了编写控制消费类电子产品软件所开发出来的小型程序设计语言系统,不过这项计划并未获得市场的肯定,因而沉寂了一段时间。但是,不久之后,由于因特网的蓬勃发展,谁也没有想到当初只是为了在不同平台系统下执行相同软件而开发的语言工具,却意外地引发了一股技术发展的潮流。于是,Sun公司对Green计划重新进行了评估并做了修正,在1995年正式向外界发表名为“Java”的程序设计语言系统。
Java之所以会成为令人瞩目的程序设计语言,主要原因之一就是因为Java具有“支持Web”的功能,可以在Web平台上设计和编写出“互动性高”与“跨平台”的程序。再加上Java语言面向对象、支持泛型程序设计的特性,因而如今Java语言已经深入日常生活中的各个领域,例如IC卡(通用智能卡)、金融卡(如银行智能卡)、身份识别证等应用。另外,还有智能设备、无线通信等应用,以及开发大规模的商业应用等各个方面,我们都可以看到无所不在的Java应用。
Java是一种面向对象的高级程序设计语言,Java语言的应用范围涵盖因特网、网络通信及智能通信设备,并成为企业构建数据库的较佳开发工具。Java语言的风格十分接近C++语言,在保有C++语言面向对象技术核心的同时,还舍弃了C++语言中容易引起错误的指针,并以引用功能取而代之,经过多次的修正、更新,Java逐渐成为一种功能完备的、面向对象的程序设计语言。Sun公司就曾提到Java语言的几项特点:简单性、面向对象、解释性、严谨性、跨平台性、高性能、多线程。
Java语法源于C++语言,因此它的指令和语法十分简单,我们只要能了解简单英文单词与语法的概念,就能进行程序设计并完成运算处理的工作。Java具有以下两点简单特性:
(1)简化了语法:Java简化了C++中的一些用法,并舍弃了不常用的语法,如容易造成内存存取问题的指针(Pointer)和多重继承的部分。
(2)垃圾回收机制(Garbage Collection):Java使用了垃圾回收机制,当程序中有不再使用的资源时,系统会自动释放其占用的内存空间,从而减少程序设计者自行管理内存资源不足的困扰。
“跨平台性”表示Java的程序不依赖于任何一个特定的硬件平台,Java程序的特点是“一次编译、到处执行”,也就是说,Java程序在编译后可以不用再经过任何更改就可以在任何支持Java的硬件设备或平台上顺利执行。基本上,无论是哪一种操作系统(Windows、UNIX/Linux或Solaris)、哪一种硬件平台(PC、个人数字设备、Java Phone或智能家电等),只要它们搭载有JVM(Java Virtual Machine,Java虚拟机)执行环境,即可顺利执行已事先编译的Java Bytecode(字节码),如图1-17所示。也就是说,执行Java应用程序必须先安装Java Runtime Environment(JRE),JRE内部包含JVM以及一些标准的Java类库。通过JVM才能在系统中执行Java应用程序(Java Application)。
当程序设计人员设计和编写好的Java源程序通过不同操作系统平台上的编译器(例如Intel的编译器、Mac OS的编译器、Solaris的编译器或者UNIX/Linux的编译器)进行编译后,产生相同的Java虚拟机字节码(Byte Code),然后这些Java虚拟机字节码再通过不同操作系统平台的解释器,翻译成该系统平台的机器码。因此,Java是建立在软件平台上的程序设计语言,而让Java实现跨平台运行的主要因素就是JVM(Java虚拟机)和Java API。
图1-17
Java源程序(Java Source)必须通过内建的实用程序javac.exe来进行编译,把Java程序的源代码编译成目标执行环境中可识别的字节码(Bytecode),字节码是一种虚拟的机器语言,而在目标环境中的执行是通过实用程序java.exe对字节码以解释方式按序执行的,这个过程如图1-18所示。
图1-18
Java程序是由类与对象所组成的,编程人员可将程序分割为多个独立的代码段,并将相关的变量与函数写入其中,相当严谨地分开处理程序的各种不同执行功能。
例外(Exception)是一种运行时的错误,在传统的计算机程序设计语言中,当程序发生错误时,程序设计人员必须自行编写一部分程序代码来进行错误的处理。不同于其他高级程序设计语言,Java语言会在运行期间发生错误的时候自动抛出例外对象以便进行相关的处理工作。我们可使用try、catch与final三个例外处理程序区块,以“专区专责”的方式解决程序运行期间可能遇到的错误。
Java内建了Thread类,其中包含各种与线程处理相关的方法(Method),真正实现同一时间执行多个程序运算。多线程是在每一个进程(Process)中包含多个线程(Thread),将程序分割成一些独立的工作,如果运用得当,多线程可以大幅度提升系统运行的性能。
相对于大多数C++编译器不支持垃圾回收机制,Java语言有自动垃圾回收(Garbage Collection)机制,这个特点受到许多从使用C++语言转到使用Java语言的程序设计人员的欢迎。这是因为许多C++程序设计人员在进行程序初始化操作时,必须在主机内存堆栈中分配一块内存空间,当程序运行结束后,必须通过指令的下达来释放被分配的内存空间。不过,一旦程序设计人员忘记回收这块内存空间,就会造成内存泄漏(Memory Leak)而浪费内存空间。因为Java语言有自动垃圾回收机制,所以当一个对象没有被引用时,就会自动释放这个对象所占用的内存空间,从而避免内存泄漏的现象。
泛型程序设计(Generic Programming)是程序设计语言的一种风格。泛型在C++中其实就是模板(Template),只是Swift、Java和C#采用了泛型(Generic)这个更广泛的概念。泛型可以让程序设计人员根据不同数据类型的需求编写出适用于任何数据类型的函数和类。我们或许可以这么说:泛型是一种类型参数化的概念,主要是为了简化程序代码,降低日后程序的维护成本。泛型语法让我们在编写Java程序时可以指定类或方法来支持泛型,而且在语法上更为简洁。Java语言中引入泛型的功能后,这项重大改变使得语言、类型系统和编译器有了许多不同以往的变化,其中许多重要的类(例如集合框架)已经成为泛型化的类了,它带来了很多好处,还提高了Java程序的类型安全。