Java语言GUI程序设计
上QQ阅读APP看书,第一时间看更新

1.2 Java程序设计语言概述

Java语言是一种通用的面向对象程序设计语言,同时还是一种软件开发环境和软件运行环境。Java提供了设计优良且易于使用的库,使设计Java程序更加容易和高效,大多数程序设计就是应用现有的库对象解决自己的应用问题。

Java程序设计语言于1995年问世,1996年发布了第一个版本。Java语言问世之后,短短一年时间即跃升到TIOBE编程语言社区排行榜的第15位(见表1.1),从2002年至今一直稳居首位(见表1.2和图1.1),是近二十年来最流行的程序设计语言,是当今最热门的程序设计语言(见表1.1和表1.2)。

1.2.1 Java程序设计语言的特点

Java语言之所以长期受到人们的追捧,得益于其先进的设计思想和技术特征。

1. 采用了面向对象程序设计思想

首先,Java语言采用了面向对象程序设计思想:从要解决的问题中提取所有概念性的组件,然后在程序中将其表达为一个“对象”;程序是对象的集合,通过对象之间的消息传递告知彼此所要做的;可以以现有对象为基础创建新类型的对象;每个对象都是某个类(一个类即一种类型)的一个实例,而每个类的最重要特性就是可以接收什么样的消息;某一特定类型的所有对象都可以接收同样的消息。

可以将对象理解为服务提供者,我们编制的程序向使用者提供服务,程序通过调用对象提供的服务实现目的,编程者的目标就是创建或在现有代码库中寻找能够提供理想服务来解决问题的一系列对象。因此,采用面向对象程序设计方法开发程序时,主要是创建新的类(数据类型)或利用现有类适配待解决的问题,而不再强迫只能使用现有的用来表示机器中的存储单元的数据类型,从而使软件开发和维护更为容易和高效。

此外,Java语言还具备了某些面向组件编程的特性。面向组件编程(Component-Oriented Programming)是对面向对象技术的进一步发展,可以进一步简化程序设计。在软件开发中,组件通常指可重复使用并且可以和其他对象进行交互的对象,控件则是提供(或实现)用户界面(UI)功能的组件,即控件是以图形化的方式显示在屏幕上并与用户进行交互的对象。Java组件具有内视的特性,这样就可以通过工具来实现Java组件的可视化。使用可视化方法设计Java图形用户界面程序时,可以将界面组件(如按钮、菜单、表格、对话框等)以拼积木的方式组合出程序界面。在采用可视化方法设计Java图形用户界面程序时,除了用到控件外,还用到不需要显示任何信息或用户界面的组件。为了简化叙述,本书不加区分地统一称之为组件。

2. 简单易用

面向对象程序设计的核心是类及类层次的设计和使用,人们对世界的认识也采用了基于共同性的分类和具有层次的分类系统,两者具有天然的相似性和共通性。因此,对于初学程序设计的人,Java语言采用的面向对象程序设计思想更易理解和掌握,编程者只需采用形象思维,而不必采用程序化思维即可理解和设计程序。

Java语言衍生自C++语言,但是剔除了C++应用中很少使用、难以理解、容易混淆的特性,从而对于有程序设计基础的人,使Java语言程序的设计变得简单、更少出错、程序运行更加稳定。

Java语言自发布之后持续不断地对语言和功能进行了更新和扩展,其编程思想和语言结构紧跟现代程序设计语言发展潮流,同时持续不断地扩充其类库(见表1.3),提供了大量的编程组件(类和接口),为许多程序设计问题提供了现成的实现。此外,还有一些软件公司(如IBM等)、开源组织(如Apache)及个人开发和提供解决特定(如网络管理、大数据分析等)问题的Java组件。Java语言的应用编程人员可以直接使用这些组件编写应用程序,从而使很多问题的Java程序开发十分简单高效。

表1.3 Java语言的功能革新

3. 跨平台

Java语言采用了独特的技术实现了Java程序跨各种硬件平台和跨各种操作系统运行,Java程序还可以在手机、平板电脑、数码相机等移动设备,以及各种嵌入式设备中运行,实现“一次编写,随处运行”的目标。也就是说,同样的Java程序既可以在Windows下运行,到了UNIX或者Linux环境也不用修改就直接可以运行了。

4. 网络性能优异

Java语言网络编程功能强大且易于使用。首先,Java平台提供了设计良好的网络类库,可以轻松地处理常用网络协议和网络编程问题;其次,使用Java语言可以方便地编写Web应用程序和各类网络应用程序;第三,使用Java编写的程序可以很好地运行于网络环境,甚至可以直接在网页中运行。

5. 安全健壮

为了使Java程序很好地在网络和分布式环境中运行,Java语言和平台的设计者投入了大量的精力进行早期的问题检测、后期动态的(运行时)检测,并消除了有出错倾向的状态。Java一开始即被设计为能够防范各种攻击,如能够禁止一些病毒常用的攻击手段(如蠕虫病毒采用的运行时堆栈溢出)、禁止在自己的处理空间之外破坏内存、禁止未经授权读写文件等,从而使用Java可以构建防病毒、防篡改的系统。

6. 高性能

编程者编写的Java程序首先编译为针对Java虚拟机(详见1.2.2节)的字节码,然后将字节码解释为本地计算机的指令运行,这是早期的Java程序的解释执行方式。现在的Java虚拟机采用了即时编译技术,将Java程序的“热点”代码编译为本地机器码执行,因此Java程序的整体执行速度与直接执行本地机器码的程序基本相同。由于Java程序的执行有一些C++程序没有的额外开销,因此早期有一些人抱怨Java程序比C++程序慢。但是,现在的计算机速度远比人们发出抱怨的时候快,且采用了固态硬盘等技术,因此开销对Java程序运行速度的影响已经十分微小,当前一个较慢的Java程序的运行速度甚至比几年前相当快的C++程序的运行速度还要快一些。

人们普遍认为,C++语言具有较高的运行效率——运行速度快且节约内存。Java应用程序与其他的解释型语言相比具有更高的性能,且随着Java即时编译技术的发展,Java程序的运行速度也越来越接近C++程序。

7. 多线程

许多程序设计问题都要求程序能够同时对多个任务加以控制。一些程序需要在执行一项任务过程中停下手头的工作,改为处理其他一些问题,之后再返回主进程;还有许多程序设计问题只要求将问题划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求。在一个程序中,这些独立运行的片断称为线程(Thread),利用线程执行的处理就叫作多线程处理。例如,图形用户界面程序运行时,当用户按下一个按钮,程序需要花费较长时间从网络中下载一幅较大尺寸的图像,此时可以创建一个新线程执行图像下载任务,程序仍然在原线程中运行以对用户的后续操作进行响应,而不是让用户等待程序完成了下载任务以后才开始响应。因此,程序的多线程运行可以带来更好的交互响应和实时行为。另一方面,当前的计算机甚至是智能手机都采用了多核多线程技术。充分利用处理器的多个核心是系统设计和程序设计追求的一个重要目标。可以将程序在逻辑上分割为数个线程,各个线程分别在不同的核心上执行会运行得更快。

Java语言通过其精心设计的类库支持多线程编程,使Java应用程序通过简单地使用有关类即可创建、调度和同步多个线程。只要操作系统支持,Java程序中的多个线程就可以利用多个核心和多个处理器。尽管主流计算机平台的线程实现各不相同,但在不同计算机平台中Java程序使用多线程的代码完全相同,这样使Java语言的多线程程序开发既简单又高效。

8. 资源免费

Java语言最初由Sun公司开发,Sun公司对Java的发展通过一个开放的国际组织JCP(Java Community Process)同时与许多其他的公司一起联手进行Java技术规范、参考实现(RI)、技术兼容包(TCK)和类库的发展开发及更新。Java虚拟机及类库的源代码可以免费获取。

2007年,Sun声称Java未来版本将在GPL(Generic Public License)下使用。2009年4月20日,甲骨文公司(Oracle)收购Sun公司并获得Java版权。甲骨文公司一直致力于保持Java开源。目前,任何人都可以免费在桌面和服务器平台获取、使用和修改Java,但在嵌入式系统使用Java则需要支付专利费,不过在十年之内这些专利就会到期,那时Java就能完全免费使用。

此外,Java的开发工具JDK,当前主流的两大Java开发平台Eclipse和NetBeans都是可以免费获取和使用的。

1.2.2 Java平台

Java不只是一种程序设计语言,还是一个完整的平台——运行在各种终端(如个人计算机、服务器、移动设备、嵌入式设备)上的系统软件,为Java程序的开发和运行提供了完整的支持。

1. JDK

JDK是Java Development Kit的缩写,是提供给Java开发人员的一套Java程序开发工具集。JDK是整个Java的核心,包括Java运行环境(Java Runtime Environment),一套Java程序开发工具和Java基础类库。

最主流的JDK是Sun公司发布的JDK,2009年之后由Oracle公司开发和维护,也是最常用的JDK。此外还有许多公司和组织都开发了自己的JDK,且各有特色。例如,IBM公司开发的JDK,BEA公司的JRocket,还有GNU组织开发的JDK等。其中,IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多,而专门运行在x86平台的JRocket在服务端运行效率也要比Sun JDK好很多。本书介绍Sun/Oracle发布的JDK。

1996年1月,Sun公司发布了Java的第一个开发工具包并命名为JDK 1.0,1997年2月发布了JDK 1.1。1999年6月发布JDK 1.2并简称为Java 2,包含J2SE、J2ME和J2EE三大平台,之后发布的JDK 1.3和JDK 1.4都属于Java 2。2004年9月,发布了Java语言的重大扩展和改进版本J2SE 1.5,并更名为Java SE 5.0(简称Java 5或JDK 5)。2005年6月发布的JDK 1.6称为Java SE 6,简称Java 6或JDK 6;2011年7月发布了Java SE 7,简称Java 7或JDK 7;2014年3月发布了Java SE 8(简称Java 8或JDK 8),这是又一个具有重大扩展和改进的版本;2017年9月发布了Java SE 9(简称Java 9或JDK 9),引入了模块化系统,一种快速运行Java语句的命令行工具JShell等。在Java 9之后,Oracle调整为每半年发布一个Java的大版本,于是于2018年3月20日正式发布了Java 10,同时有一个基于发布时间的版本号18.3。此外,Java 8和将于18年9月发布的Java 11(18.9 LTS)是长期支持版(LTS),而Java 9和Java 10不是。

进行Java程序开发首先需要安装和配置JDK,主要步骤如下。

1)下载JDK

访问网站http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html,在页面(见图1.2)中单击所选版本,例如Java SE 8u144下的图标,在选定版本下载页面单击,然后在下载文件列表中单击所需要计算机平台的文件下载链接(如,见图1.3),即可下载到所选的JDK文件(如)。

2)安装JDK

在Windows系统下双击所下载的JDK文件图标,运行JDK安装程序,即开始Java SE开发工具包的安装向导。单击“下一步”按钮,选择要安装的功能(见图1.4),必要时可以单击“更改”按钮修改JDK的安装文件夹位置。单击“下一步”按钮,安装程序开始复制文件。之后出现设置JRE安装目标文件夹的向导页(见图1.5),单击“下一步”按钮使用默认位置(必要时可以单击“更改”按钮以修改JRE的安装文件夹位置)。最后单击“关闭”按钮即完成JDK的安装过程。

图1.2 JDK下载网站

图1.3 JDK下载页面

图1.4 Java SE开发工具包的安装向导——可选功能

图1.5 设置JRE安装目标文件夹

3)JDK目录结构

JDK 8及以前版本采用了基本一致的目录结构(见图1.6(a)),JDK_HOME是安装JDK的目录。而JDK 9版的目录结构则有较大变化(见图1.6(b)),最大的变化就是删除了JDK和JRE之间的区别,增加了包含平台模块的jmods目录,JDK 10版本与此相同。

图1.6 JDK目录结构

4)配置JDK环境变量

在Windows 7操作系统中单击按钮,在“开始”菜单中单击“控制面板”,运行控制面板程序。在“所有控制面板项”窗口单击“系统”项,在新窗口的左窗格单击“高级系统设置”项。在新出现的“系统属性”窗口单击“环境变量”按钮,之后在“环境变量”窗口进行设置。

在JDK 1.5之前的版本需要配置JAVA_HOME、CLASSPATH和Path三个环境变量,之后的高版本只需要配置Path即可。Path环境变量的具体配置方法是,在系统变量列表选择Path变量,单击下部的“编辑”按钮,在“变量值”输入框后添加“;JDK安装目录\bin”,例如“;C:\Program Files (x86)\Java\jdk1.8.0_144\bin”,单击“确定”按钮,接着单击“确定”按钮,最后单击“确定”按钮即可完成配置。

在Windows10系统中单击桌面左下角的“开始”菜单,在“开始”菜单中找到并单击“Windows系统”菜单下的“控制面板”菜单项。在“控制面板”窗口单击“系统和安全”项,单击右边窗格的“系统”项,之后单击“系统”窗口左窗格的“高级系统设置”项即可出现“系统属性”窗口。其余设置过程与Windows 7中的相同。

在Windows 7系统中打开“开始”菜单,单击“所有程序”|“附件”|“命令提示符”菜单项。在Windows 10系统中打开“开始”菜单,单击“Windows系统”|菜单项。在“命令提示符”窗口输入“javac -version”和“java -version”,如果命令输出类似于如图1.7所示,则说明JDK的安装和环境变量的配置是正确的。

图1.7 JDK环境变量配置测试窗口

2. JRE

JRE为Java Runtime Environment的简称,即Java运行时环境,是可以在其上运行、测试和传输应用程序的Java平台,包括Java虚拟机(JVM)、Java核心类库和支持文件。JRE自带的基础类库主要是JRE\lib\rt.jar文件,包括Java平台标准版的所有类库,与JRE的版本一致。Java Plug-in软件是JRE的重要组成部分,为Java Applet(小应用程序)和JavaBean组件在使用Sun的JRE浏览器中的运行提供了支撑。

如果只需运行Java程序或Applet而不开发Java软件,则只需要下载并安装JRE即可。在如图1.2所示页面中单击所选版本的图标,即可打开JRE的下载页面(见图1.8),接受许可协议后单击所需要计算机平台文件的下载链接即可获得所需的JRE。但是,采用不同版本的JDK开发的Java程序需要在对应版本的JRE下运行,因此Java程序开发者在发布其软件时都应该带有适当版本的JRE,而不需要用户自己下载JRE软件。事实上,在开发者安装JDK时已经同时安装了JRE(见图1.5),在发布Java程序时带上这个文件夹及其中的文件(如C:\Program Files (x86)\Java\jre1.8.0_144)即可。

图1.8 Sun的JRE下载页面

3. JVM

JVM是Java Virtual Machine的缩写,中文叫作Java虚拟机,是在实际的计算机系统上仿真模拟各种计算机功能来实现的虚构出来的计算机。Java虚拟机是运行所有Java程序的抽象计算机,是Java程序运行环境的核心。

JVM是一种用于计算设备的规范,这个规范描述了一个指令集、一组寄存器、一个堆栈、一个“垃圾堆”和一个方法区。一旦一个Java虚拟机在给定的平台上运行,任何Java程序(编译之后的程序,称作字节码)都能在这个平台上运行。开发者使用Java语言编写的Java源程序经过JDK的编译器编译之后生成字节码(.class)文件。Java虚拟机以一次一条指令的方式来解释字节码并把它映射到实际的处理器指令,也可以将字节码由即时(Just-In-Time, JIT)编译器进一步编译为实际处理器指令执行。

JVM开发者针对各种不同的硬件设备(如Intel计算机、Mac计算机和各类手机等)及不同的操作系统(如Windows、Linux和Mac OS X等)构成的主流平台,都开发出相应的Java虚拟机软件系统。这些不同的JVM都实现了共同的JVM规范,任何Java程序都是针对共同的JVM编程和运行(见图1.9),因而Java语言和Java程序实现了平台无关性及跨平台运行,这是Java语言最具吸引力的特性之一。

4. Java类库

Java官方为Java程序开发者提供了众多实现各种基本编程任务的功能强大的类,这些类按照功能分类组织在各个包中,随JDK一起发布,称为Java类库或Java API(Application Programming Interface,应用程序编程接口)。

图1.9 Java程序跨平台运行原理示意

Java官方同时为Java类库提供了完善的API文档。在JDK下载网站页面(见图1.2)的右边单击Java资源列表中的API链接,就会打开Java API规范版本选择页面(见图1.10),单击页面中部适当版本的链接(如Java SE 8),即可打开Java API文档首页(见图1.11)。在Java API文档网站可以找到Java标准平台的类库使用方法和帮助文档。

Java类库是Java平台的最主要组成部分之一。Java类库使Java程序设计者可以轻松完成原本有一定难度的编程任务,如数学计算、联网、多线程编程、图形用户界面设计、数据库操作、数据的输入输出、安全加密、图形图像处理和声音处理等。Java类库系统是Java获得成功并广泛流行的主要原因。

图1.10 Java API规范版本选择页面

图1.11 Java API文档首页

1.2.3 Java语言的应用

Java语言是一种通用的程序设计语言,在个人计算机上的桌面图形用户界面程序设计,行业和企业信息化、管理自动化以及电子政务等方面的应用程序设计,智能手机等消费类电子产品、嵌入式设备应用程序以及游戏程序的开发等方面都得到了广泛的应用。

Sun公司于1999年在美国旧金山召开的Java One(Open Net Environment)大会上公布了Java体系架构,该架构根据应用开发的级别将Java应用平台划分为三个版本,分别是Java标准版、Java企业版和Java微型版(见图1.12)。

图1.12 Java应用平台

1. 标准版(Java SE)

Java SE是Java平台标准版的简称(Java Platform Standard Edition,旧版本称为Java 2 Platform),用于开发和部署桌面计算机、服务器以及嵌入设备和实时环境中的Java应用程序。Java SE基于JDK和JRE,包括用于开发Java程序的基础类库,也是其他Java技术的基础。

2. 企业版(Java EE)

Java EE是一种利用Java平台来简化企业解决方案的开发、部署和管理相关复杂问题的体系结构。Java EE技术的基础是核心Java平台或Java平台的标准版,对标准版进行功能扩展,提供一系列功能用以解决进行企业应用开发中所面临的复杂问题,通过中间层集成框架技术满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用开发的需求,使企业开发者大幅缩短其Java应用系统投放市场的时间。

Java EE不仅巩固了标准版的许多优点,例如“编写一次,随处运行”的特性、方便的数据库存取、分布式计算接口以及能够在Internet应用中保护数据的安全模式等,同时还提供了对企业Java组件EJB、Web服务器端Java编程接口、Java服务器页面JSP以及XML技术的全面支持。

3. 微缩版(Java ME)

Java ME是Java微缩版(Java Platform Micro Edition)的简称,是对标准版Java SE进行功能缩减后的版本。Sun公司将Java ME定义为“一种以广泛的消费性产品为目标的高度优化的Java运行时环境,包括寻呼机、移动电话、可视电话、数字机顶盒和汽车导航系统”。为移动设备(包括消费类产品、嵌入式设备、高级移动设备等)提供了基于Java环境的开发与应用平台。

Java ME目前分为三类配置,一类是面向小型移动设备的CLDC(Connected Limited Device Profile),另一类是面向功能更强大的移动设备如智能手机和机顶盒,称为CDC(Connected Device Profile)。Java ME有自己的类库,其中,CLDC使用专用的称为KVM的Java虚拟机。Java Card技术主要是让智慧卡或与智慧卡相近的装置上,以具有安全防护性的方式来执行小型的Java Applet,此技术也被广泛运用在SIM卡、提款卡上。Java Card VM是标准JVM的子集,负责对Java Applet进行程序直译、执行及结果回应。

Java ME在开发面向内存有限的移动终端的应用时显得尤其实用,因为它是建立在操作系统之上的,使得应用的开发无须考虑太多特殊的硬件配置类型或操作系统。因此,开发商也无须为不同的终端建立特殊的应用,制造商也只需要简单地使它们的操作平台可以支持Java ME即可。在物联网领域,Java程序“一次编写,随处运行”的特性显著地降低了成本,使Java语言成为企业级物联网发展战略中不可或缺的重要一环。

4. 安卓系统的应用开发采用Java语言

多数智能手机和平板电脑都采用Android(安卓)操作系统,此类产品已经非常普及。随着移动互联网的到来和迅猛发展,移动互联网开发的需求与日俱增。Android应用的开发语言用的是Java语言,并且在Android中也用到了Java核心类库的大量类,因此,掌握Java程序设计语言是进行Android应用开发的基础。

此外,Java是大数据平台解决方案的重要实现语言之一。在大数据处理领域,以Java为基础的工具群兴起,Hadoop是以Java为基础的架构并以这样或那样的方式使用Java。很多有用的软件和开发工具是用Java开发的,例如Eclipse、IntelliJ、NetBeans IDE。