第1章
Java语言基础<br>本章内容:<br>在本章中,介绍了面向对象(Object-Oriented,OO)的程序设计思想、Java语言历史及特点、Java面向对象程序设计,以及Java开发环境搭建和Java开发工具Eclipse。<br>学习目标:<br>?
了解面向对象程序设计思想<br>? 了解Java发展历史及特点<br>?
掌握Java开发环境搭建<br>? 了解主流的Java开发工具<br>?
掌握Eclipse的安装配置<br>1.1 面向对象编程<br>1.1.1
面向对象的程序设计思想<br>面向对象(Object-Oriented,OO)是一种程序设计的思想,它起源于Kisten
Nygaard和Ole Johan
Dahl于20世纪60年代开发的Simula语言,然而真正的面向对象编程(Object-Oriented
Programming,OOP)由20世纪70年代初Palo Alto研究**的Alan
Kay所在的研究小组开发出的Smalltalk语言奠基。正是通过Smalltalk的研制与推广应用,使人们注意到面向对象方法所具有的模块化、信息封装与隐蔽、抽象性、继承性、多样性等独特之处,这些优异特性为研制大型软件、提高软件可靠性、可重用性、可扩充性和可维护性提供了有效的手段和途径。<br>Smalltalk对后来出现的面向对象语言,如Object-C、C++等都产生了深远的影响。与此同时,随着面向对象语言的出现,面向对象程序设计也就应运而生且得到迅速发展。由于面向对象编程也是Java编程语言的核心,因此在系统地学习Java语言之前,需要首先对面向对象的程序设计思想有一个初步的了解,并且在以后的学习过程中要不断地深入理解并掌握面向对象的程序设计思想。那么,什么是面向对象编程呢?它具有什么样的优势呢?<br>面向对象编程是将客观事物看做具有状态和行为的对象,并通过抽象找出同一类对象的共同状态(静态特征)和行为(动态特征),然后构成类的一种程序设计思想。这里需要指出的是,对象是现实世界中随处可见的人、事、物体等多种实体,如天上飞的鸟、地上走的人、水里游的鱼等,即现实世界中的一切事物皆是对象。对象具有的状态和行为即对象自身具有的结构。在面向对象编程中,对象是类的实例,类是用来创建对象的模板。例如,你和我作为对象,都是人(Person)这个类的实例,而且都具有一些共同的状态属性,如姓名、籍贯、身高、年龄和体重等许多属性。同时我们每一个人还具有一些说话、工作、吃饭、睡觉、读书、写字等行为。然而,我们每一个人之所以都是****的,是因为我们每个人的这些属性都有特定的值。<br>在Java程序中,所有对象都是由类创建的。一个Java程序中的类主要包括以下两部分:<br>(1)类的声明。<br>(2)类的主体。<br>在Java中定义上文Person类的部分代码如下:<br>//代码1-1<br>class
Person{<br> String name; //
定义姓名成员变量<br> String nativePlace; //
定义籍贯成员变量<br> String height; //
定义身高成员变量<br> String age; //
定义年龄成员变量<br> String weight; //
定义体重成员变量<br><br> //
…<br><br> public void Talk() { //
定义说话行为<br> //
…<br> }<br><br> //
…<br> public void Eat() { //
定义吃饭行为<br> //
…<br> }<br>}<br>1.1.2
面向对象编程的主要特征<br>在面向对象程序设计方法出现以前,人们都是采用以事件为**的面向过程(Procedure-Oriented,PO)编程方法。面向过程编程方法的主要思路是按功能将程序结构划分为若干个基本模块,这些模块功能上相对独立,模块之间关系尽可能简单,并依照自顶向下、逐步求精的原则实现形成树状结构的各个模块。虽然面向过程的编程方法具有很多优点,但是它把数据和处理数据的过程分离为相互独立的实体,一旦数据结构发生改变,将导致所有相关程序都有修改,使得程序可重用性差。所以,相对于面向过程程序设计方法,面向对象程序设计方法具有以下主要特征和优势。<br>1)封装性<br>封装是一种信息隐蔽技术,是面向对象编程的核心思想之一。封装使数据和加工该数据的方法封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性,而对象的内特性对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,有效避免了外部错误对内部数据的影响,实现了错误局部化。同时当一个对象的内部结构或实现方法改变时,由于只要保持对象的接口不改变,就不用改变程序的其他部分,从而提高了程序的可维护性。<br>2)继承性<br>继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个子类可以直接继承其父类的全部描述,同时还可修改和扩充。继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,若没继承性机制,则类对象中的数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。<br>3)多态性<br>对象根据所接收的消息而做出动作,同一消息被不同的对象接收时可产生完全不同的行动,这种现象称为多态性。在面向对象编程中可通过在派生类中重定义基类函数来实现多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接收消息的对象自行决定,也就是说,同一消息可调用不同的方法。例如,Print消息被发送给一个图或表时所调用的打印方法与将同样的Print消息发送给一文本文件所调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。<br>综上可知,在面对对象方法中,类和继承是适应人们一般思维方式的描述范式。通过继承可以大幅减少冗余的代码,方便地扩展现有代码,提高编码效率,降低出错概率,降低软件维护的难度。通过保持外部接口不变的情况下改变内部实现,减少甚至避免外界的干扰。<br>1.2
Java程序设计语言概述<br>Java是由Sun
Microsystems公司于1995年5月推出的面向对象程序设计语言。Sun公司在《Java白皮书》中这样对Java进行定义:Java:A
simple, object-oriented, distributed, interpreted, robust, secure,
architecture-neutral, portable, high-performance, multi-threaded,
and dynamic
language。即Java是一种简单的、面向对象的、分布式的、解释型的、健壮的、**的、结构中立的、可移植的、高性能的、多线程的动态语言。Java语言具有**的跨平台特性,所编译的程序能够在多种操作系统上运行,即“一次编写,到处运行(Write
Once,Run Anywhere)”。<br>1.2.1
Java发展历史<br>Java语言源于Oak语言,这是Sun公司在一项消费性电子产品软件发展方案中采用的语言。Oak的设计目标是用以开发可靠、紧凑、易于移植的分布式嵌入系统。尽管Oak语言在技术上颇为成功,但由于商业上的原因,却未能在市场的激烈竞争中站稳脚跟。然而,Internet和WWW日新月异的发展却为Oak创造了新的生存空间。之后,Games
Gosling对Oak进行了小规模的改造,成为一种非常适合网络开发的独特语言,这就是在1995年5月23日诞生的Java。Java的诞生标志着互联网时代的开始。由于Java恰逢其时地诞生于Internet和WWW蓬勃发展的时期,经过多年的蓬勃发展,致使如今的Java与当初的Oak语言已不可同日而语,使得它逐渐成为Internet上受欢迎的开发与编程语言,一些闻名的计算机公司纷纷购买了Java语言的使用权,如Microsoft、IBM、Netscape、Novell、Apple等。而且Sun公司采用了一种“开放”策略,将Java技术公之于众,更激发了第三方软件开发商的极大热情,纷纷发展Java技术,因此Java的前景是非常广阔的。<br>Java的主要发展历史简述如下:<br>1995年5月23日,Java语言诞生。Java的诞生标志着互联网时代的开始,它能够被应用在全球信息网络的平台上编写互动性极强的Applet程序,而1995年的Applet无疑能够给人们无穷的视觉和脑力震荡。其实Java的诞生颇有那么一股“有心栽花花不开,无心插柳柳成荫”的味道。<br>1996年1月,**个JDK1.0诞生。<br>1996年2月,Sun发布Java芯片系列,包括picoJava、microJava和UltraJava。并推出Java数据库连接JDBC数据库API。<br>1996年4月,10个*主要的操作系统供应商声明将在其产品中嵌入Java技术。<br>1996年5月,Sun在大会上推出一系列Java平台新技术,如JavaMediaAPIs、CommerceAPIs、SecurityAPIs、ServeletAPIs、ManagementAPIs等。<br>1996年9月,约8.3万个网页应用了Java技术来制作,同时推出Java虚拟机规范和Java类库。<br>1996年10月,Sun完成JavaBeans规范并发布,并发布**个JavaJIT(Just-In-Time)编译器。<br>1997年2月18日,JDK1.1发布,它蕴藏着新的翻天覆地的革命。在JDK1.1时代,Java平台分为PersonalJava与EmbeddedJava。PersonalJava比较适用于运算资源和内存丰富的设备,而EmbeddedJava适用于资源有限的设备。<br>1998年12月8日,Sun发布了Java历史上*重要的一个JDK版本,即JDK1.2。这个版本标志着Java已经进入Java2时代,这个时期也是Java飞速发展的时期。JDK1.2分成J2EE、J2SE和J2ME三大块,得到了市场的强烈反响。相对于之前的JDK,JDK1.2增加了*吸引眼球的Swing。<br>2000年5月8日,JDK1.3发布。在JDK1.3时代,**个稳定版本的Tomcat3.x得到了广泛的应用,WebLogic等商业应用服务器也渐渐被接受。<br>2002年2月26日,JDK1.4发布。由于Compaq、Fujitsu、SAS、Symbian、IBM等公司的参与,使得JDK1.4发展很快。在此时间,.NET平台和Java平台之间曾经发生了一次声势浩大的孰优孰劣的论战,焦点在于Java的性能问题。<br>2004年9月30日18点,J2SE1.5横空出世,这是Java语言发展史上的里程碑事件。为了表示这个版本的重要性,J2SE1.5更名为J2SE5.0。此版本增加了诸如泛型、增强的for语句、可变数目参数、注释、自动拆箱和装箱等功能,推出了EJB3.0规范及JSF等。利用JSF可以很快地建立起复杂的JSP界面。<br>2005年,J2EE更名为Java
EE,J2SE更名为Java SE,J2ME更名为Java ME。<br>2006年12月,发布了Java
SE6.0。此版本不仅在性能、易用性等方面得到了****的提高,而且还提供了如脚本、全新的API的支持。<br>2009年4月20日,Oracle公司并购了Sun公司。<br>2011年7月28日,Oracle正式发布Java
7。这是自2006年12月Sun发布Java SE
6以来的**重要版本,也是Sun被Oracle收购以来发行的**个版本,包含了Java诞生以来*大的改进。<br>现在,Java已经成为开发和部署企业应用程序的**语言。Java
2的计算平台以Java语言为**,其体系结构与平台无关。目前,它有三个独立的版本。<br>1)Java
SE<br>Java技术标准版(Java Standard Edition)。Java
SE主要针对包含丰富的GUI(图形用户界面)、复杂逻辑和高性能的桌面应用程序。<br>2)Java
EE<br>Java技术企业版(Java Enterprise Edition)。Java
EE是一个标准的多层体系结构,适用于开发和部署分布式、基于组件、**可靠、可伸缩和易于管理的企业应用程序,以减少开发分布式应用程序的复杂性和代价,简化开发和部署过程。Java
EE体系结构将一个企业应用程序分隔为客户层、表示层、业务层和数据层。以服务器端程序和企业软件的开发为目标。<br>3)Java
ME<br>Java技术微型版(Jave Micro
Edition)。它是针对具有有限的连接、内存和用户界面能力的设备应用程序而设计,如移动电话、PDA、互联移动设备、嵌入式设备、能够接入电缆服务的机顶盒等。<br>1.2.2
Java语言特点<br>Java语言具有鲜明的特点,使它在分布式网络应用、多平台应用、图形用户界面、Web应用、多线程应用等软件的开发中成为方便**的工具。下面简要进行介绍。<br>(1)开发和使用简单性。Java的语法风格非常近似于C++语言,但删改了C++中的指针、操作符重载等一些易混淆的地方。在内存管理方面又提供了垃圾收集机制。这使程序员可以在实现程序功能方面投入更多的精力,而无须考虑诸如内存释放等枝节问题。C++中复杂而灵活的指针操作往往导致严重的错误,一向是开发调试人员深感棘手的问题,而这在Java中却不存在。Java虚拟机还能为程序链接本地甚至远程的类库,开发人员不必关注其细节。<br>(2)分布式。Java对TCP/IP协议(如HTTP、FTP)的支持使Java程序可以轻易地建立网络连接,并通过统一资源定位器(Uniform
Resource
Locator,URL)访问远程文件,如同访问本地文件一样方便。Java的运行时系统能动态地通过网络装入字节码,动态使用新的协议控制软件。<br>(3)面向对象性。Java对面向对象的要求十分严格,不允许定义独立于类的变量和方法。Java以类和对象为基础,任何变量和方法都只能包含于某个类的内部。这就使程序的结构更为清晰,为继承和重用带来便利。Java
提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类。Java
提供的Object
类及其子类的继承关系如同一棵倒立的树。根类为Object类,Object类功能强大,经常会使用到它及其派生的子类。<br>(4)**性。对于网络应用来说,这一点是极为重要的。Java将**性作为**考虑,设置了层层防范。首先在编译时进行语法、语义的检查。链接时,还要再进行一遍编译级的类型检查,消除间接对象访问。运行时,Java的运行时系统将进行字节码检验,并记录对象的存储情况,将访问限制在**范围之内。本地的类与远程的类分开运行,阻止远程系统对本地系统的破坏。支持Java的浏览器还允许用户控制Java软件对本地系统的访问。各种措施的综合使Java程序的**性得到保证。<br>(5)平台独立性和可移植性。Java的应用程序接口(API)和运行时系统是可移植性的关键。Java为支持它的各种操作系统提供了一致的API。在API界面上,所有Java程序将都不依赖于平台。Java的运行时系统在解释执行程序时,将字节码转化为当前机器的机器码。程序开发人员无须考虑使用应用时的硬件条件和操作系统结构,用户只需有Java的运行时系统,就可运行编译过的字节码。<br>(6)多线程。Java提供了内置的多线程支持,程序中可以方便地创建多个线程,各个线程执行不同的工作,这使程序工作更为简单。例如,用不同的线程分别控制声音和图像,可以轻易构筑声像交织的复杂效果,而编程时只要分别安排各线程的工作,不必关心它们的合作,这也大大促进了程序的动态交互性和实时性。为了控制各线程的动作,Java还提供了线程同步机制。这一机制使不同线程在访问共享资源时能够相互配合,保证数据的一致性,避免出错。<br>(7)解释执行。Java程序经过编译形成字节码,然后在虚拟机上解释执行。这是Java程序能够独立于平台运行的基础。这也使程序有利于增量链接,从而加快开发过程。<br>(8)健壮性。Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。Java致力于检查程序在编译和运行时的错误。Java的**检查机制使得Java更具健壮性,能够帮助检查出许多开发早期出现的错误。<br>1.3
Java开发环境搭建<br>工欲善其事,必先利其器。学习编程语言也一样,首先得搭建好编程学习环境。任何一门语言的学习之初,都应该搭建好环境且准备好学习文档,在遇到任何问题时能够及时查询文档,在不断的遇到问题、解决问题中成长。针对学习Java而言,其开发环境包括下载安装Java开发包(Java
SE Development Kit,JDK)和配置环境变量。