您的位置: 网站首页 > 程序开发 > Java程序设计 > 第1章 Java概述 > 【1.1 了解Java】

1.1 了解Java

 

Java语言是由Sun公司于1995年推出的一种编程语言,也是目前推广速度最快的程序设计语言,它采用面向对象的编程技术,功能强大且简单易学。Java伴随着Internet的发展而成熟,是近20年来计算机软件环境中最有意义的进步之一。使用它可在各式各样不同种机器、不同种操作平台的网络环境中开发软件。Java正在逐步成为Internet应用的主要开发语言,它彻底改变了用软件的开发模式,带来了自PC机以来又一次技术革命,为迅速发展的信息世界增添了新的活力。

本章主要内容

&        Java的特点及发展过程

&        安装和使用Java开发运行环境

&        Eclipse集成化开发环境的使用

1.1  了解Java

JavaSun公司研发的一种新型的程序设计语言。在高级语言已经非常丰富的背景下,Java语言脱颖而出,不仅成为一门最为流行的计算机语言,而且形成一种专门的技术,有其独特的历史背景和独树一帜的品质。

1.1.1  Java的诞生和发展

Java从诞生到现在已经有十多年时间,在这段时间里衍生了许多与Java相关的技术和标准。现在,我们来回顾一下Java的发展轨迹。

1Java的诞生

熟悉Java历史的人非常多,如果要问Java是哪年诞生的,也许大多数人都会回答是1995年(这个非常好记,因为微软的Windows 95也是在这一年发布的)。但事实上Java早在20世纪90年代初就开始酝酿了。

19914月,Sun公司的James Gosling领导的绿色计划(Green Project)开始着力发展一种分布式系统结构,使其能够在各种消费类电子产品上运行。而Green项目组的成员一开始使用C++语言来完成这个项目,由于Green项目组的成员都具有C++背景,因此他们首先把目光锁定了C++编译器。Gosling首先改写了C++编译器,但很快他就感觉到C++的不足,需要研发一种新的语言Java来替代它。

17个月后,整个系统完成了。这个系统是更注重机顶盒式的操作系统,被命名为Oak。不过在当时市场不成熟的情况下,他们的项目并没有获得成功,但Java语言却得到了Sun公司总裁McNealy的赏识。

直至1994年下半年,由于Internet的迅猛发展,第一个万维网浏览器Mosaic诞生了。此时,工业界对适合在网络异构环境下使用的语言有一种非常急迫的需求;James Gosling决定改变绿色计划的发展方向,他们对Oak进行了小规模的改造,就这样,Java1995323诞生了。Java的诞生标志着互联网时代的开始,它能够被应用在万维网的平台上编写互动性极强的Applet程序,因此1995年的Applet无疑带给了人们无穷的视觉和脑力震荡。

2JDK 1.0

1995Sun公司推出的Java还只是一种语言,如果想开发复杂的应用程序,则必须要有一个强大的开发库支持。因此,Sun公司在1996123发布了Java开发工具包(Java Development KitJDK1.0。这个版本包括了两部分:Java运行环境(Java Runtime EnvironmentJRE)和开发环境。在运行环境中包括了核心API、集成API、用户界面API、发布技术和Java虚拟机(Java Virtual MachineJVM5个部分。在JDK 1.0时代,JDK除了AWT(一种用于开发图形用户界面的API)外,其他的库并不完整。

Sun公司推出JDK 1.0后,紧跟着在1997218发布了JDK 1.1JDK 1.1相对于JDK 1.0最大的改进就是为JVM增加了即时编译器(Just In TimeJIT)。JIT和传统的编译器不同,传统的编译器是编译一条指令,运行完后再将其扔掉;而JIT会将经常用到的指令保存在内容中,在下次调用时就不需要再编译了。这样JDK在效率上有了非常大的提高。

3Java 2时代

1998124Sun发布了Java历史上最重要的一个JDK版本:JDK 1.2。这个版本标志着Java已经进入Java 2时代,这个时期也是Java飞速发展的时期。Sun公司对Java进行了很多革命性的变化,而这些革命性的变化一直沿用到现在,对Java的发展形成了深远的影响。

JDK 1.2自从被分成了企业版(Java 2 Enterprise EditionJ2EE)、标准版(Java 2 Standard EditionJ2SE)和微缩版(Java 2 Micro EditionJ2ME)三大块,得到了市场的强烈反响。

Java 2还增加了很多新的特性,其中最著名的当属SwingSwingJava的另一个图形库。它不但有各式各样先进的组件,而且连组件风格都可替换。Swing出现后,很快就抢了AWT的风头;但Swing并不是为取代AWT而存在的,事实上Swing是建立在AWT之上的。另外Java 2还在多线程、集合类和非同步类上做了大量的改进。

JDK 1.2开始,Sun公司以平均每两年一个版本的速度推出新的JDK200058Sun公司对JDK 1.2进行了重大升级,推出了JDK 1.3

Sun公司在JDK 1.3中同样进行了大量的改进,主要表现在一些类库(如数学运算、新的Timer API等)上,在JNDI接口方面增加了一些DNS的支持以及增加了JNI的支持。这使得Java可以访问本地资源,支持XML以及使用新的Hotspot虚拟机代替传统的虚拟机

JDK 1.3时代,相应的应用程序服务器也得到了广泛的应用,如第一个稳定版本的Tomcat 3.x在这一时期得到了广泛的应用,Weblogic等商业应用服务器也逐渐被接受。

2002213Sun公司发布了JDK历史上较为成熟的版本:JDK 1.4

进入21世纪以来,曾经在.NET平台和Java平台之间发生了一次声势浩大的孰优孰劣的论战,Java的主要问题就是性能。因此,这次Sun公司将主要精力放在了Java的性能上。在JDK 1.4中,Sun公司对Hotspot虚拟机的锁机制进行了改进,使JDK 1.4的性能有了质的飞跃。同时由于CompaqFujitsuSASSymbianIBM等公司的参与,使JDK 1.4成为发展最快的一个JDK版本。到JDK 1.4为止,人们已经可以使用Java实现大多数的应用了。

4JDK的成熟期

虽然从JDK 1.4开始Java的性能有了显著的提高,但Java又面临着另一个问题,那就是复杂性。

虽然Java是纯面向对象语言,但它对一些高级语言特性(如泛型、增强的for语句)并不支持;而且与Java相关的技术,如EJB2.x,也由于它们的复杂性而很少有人问津。也许是Sun公司意识到了这一点,因此,200410月,Sun公司发布了我们期待已久的版本:JDK 1.5,同时,Sun公司将JDK 1.5改名为J2SE 5.0。和JDK 1.4不同,JDK 1.4的主题是性能,而J2SE 5.0的主题是易用。Sun公司之所以将版本号1.5改为5.0,就是预示着J2SE 5.0较以前的JDK版本有着很大的改进。

Sun公司不仅为J2SE 5.0增加了诸如泛型、增强的for语句、可变数目参数、注释(Annotations)、自动拆箱(Auto-Unboxing)和装箱等功能,而且也更新了企业级规范,如通过注释等新特性改善了EJB的复杂性,并推出了EJB 3.0规范。同时又针对JSP的前端界面设计推出了JSFJSF类似于ASP.NET的服务端控件,通过它可以很快地建立起复杂的JSP界面。

2006年年底,Sun公司又再接再厉地推出了J2SE 6.0,它不仅在性能、易用性方面得到了前所未有的提高,而且还提供了如脚本、全新的APISwingAWTAPI已经被更新)等的支持。

Java在发展的十几年时间里,经历了无数风雨,现在Java已经成为一种相当成熟的语言。Java平台吸引了数百万的开发者,在网络计算遍及全球的今天,作为Java技术的基础,J2SE功不可没,让我们期望J2SE伴随Java平台一路走好。

1.1.2  Java语言的特点和优势

Sun公司的白皮书对Java的定义是“Java: A Simple, object-oriented, distributed, robust, secure, architecture-neutral, portable, high-performance, multi-threaded, and dynamic language.,即Java是一种简单的、面向对象的、分布式的、健壮的、安全的、体系结构中立的、可移植的、高性能的、多线程的动态语言。

这个定义充分说明了Java语言的特点。

1.简单性

Java是一种简单的语言。语言的设计者尽量减小语言的规模。Java取消了许多语言中十分烦琐和难以理解的内容,例如C++的指针、运算符重载、类的多继承等,并且通过实现自动垃圾收集功能大大减少了程序设计者的内存管理工作。Java在外观上让大多数程序员感到很熟悉,便于学习;同时Java的编译器也很小,便于在各种类型的计算机上实现。

2.面向对象

Java是一种面向对象的语言。这里的对象是指封装数据及其操作方法的程序实体。Java的程序设计集中于对象及其接口,Java提供了简单的类机制以及动态的接口模型,实现了模块化和信息封装。Java类可提供一类对象的原型,再通过继承机制实现代码的重用。

3.分布式

Java是一种分布式语言。它有一套很齐全的通信及其相关功能的程序库,可以处理TCP/IP及其他协议,用户可用URL地址在网络上很方便地访问其他对象。利用Java来开发分布式的网络程序是Java的主要应用之一。

Java是面向网络的语言,是Internet上的通用语言。Java从设计上就支持网络应用,它是分布式语言,Java接口和Java类是以包(Package)的形式分组存放的。Java语言专门有一个支持网络的包Java.net,通过这个包中的类,支持各种层次的网络连接。例如,可以处理TCP/IP,用户可以通过URL地址在网络上很方便地访问其他远程对象,就如同存取一个本地(Local)文件系统一样简单。Java也以Socket类支持可靠的流(Stream)网络连接,所以可以产生分布式的客户机和服务器,这比原来的客户机/服务器方式更进了一步。

4.健壮性

Java原来是用做编写消费类家用电子产品软件的语言,所以它是被设计成编写高可靠性和稳健性软件的。

Java是一个强类型语言。它具有扩展编译时检查潜在的类型不匹配问题的功能。Java要求显式的方法声明,它不支持C语言风格的隐式声明。这些严格的要求保证了编译程序能捕捉到调用错误,从而保证了程序的可靠性。

5.安全性

Java是一种安全的网络编程语言,不支持指针类型,一切对内存的访问都必须通过对象的实例来实现。这样能够防止他人使用欺骗手段访问对象的私有成员,也能够避免在指针操作中易产生的错误。此外,Java有多个阶层的互锁保护措施,能有效地防止病毒侵入和蓄意的破坏行为。

6.可移植性

Java具有很好的移植性,主要得益于它与平台无关的特性。同时,Java的类库中也实现了与平台无关的接口,使得这些类库也能移植。而且,虽然Java编译器主要是由Java本身来实现,但是Java的运行系统(虚拟机)则由标准C语言实现,因而整个Java系统都具有可移植性。

7.解释性语言

Java虚拟机能直接在任意计算机上解释执行Java字节码,因为字节码本身带有许多编译信息,使得连接过程更加简单。

Java编译程序把Java源程序编译成字节码,而不是通常的汇编码或机器码,这是Java跨平台特点的关键所在。为了实际运行Java程序,还要使用解释程序来执行编译出来的字节码,所以在这种意义上说Java是一个解释性语言。实际上Java的前一阶段是编译,后一阶段是解释。

Java字节码提供对计算机体系结构中立的目标文件格式,而且代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行环境的系统上运行。这个解释程序和运行环境实现了一个称为Java虚拟机的运行系统,简称JVM

8.高效性

Java是一种先编译后解释的语言,但和其他纯解释性语言不同,Java字节码的设计使之能很容易地直接转换成对应于特定CPU的机器码或汇编码,当然这不如全编译性语言快。事实上,JavaC语言写的程序执行起来平均慢20倍。不过要认识到,这个速度对交互式运行、图形用户界面和基于网络的应用来讲是适当的,因为在这些应用中,CPU常常是有空闲的,它等待用户做某些事,或者等待来自网络上的程序或数据。

9.多线程机制

Java具有多线程机制,这使得应用程序能够并行地执行。它的同步机制也保证了对共享数据的共享操作。同时线程具有优先级的机制,有助于分别使用不同线程完成特定行为,也提高了交互的实时响应能力。

Java程序通过流控制来执行程序流,程序中单个顺序的流控制称为线程,多线程则指的是在单个程序中可以同时运行多个不同的线程来执行不同的任务。

多线程程序设计大大提高了程序执行效率和处理能力。对程序员来说,用CC++语言编写处理多线程的代码可能是很麻烦的事;而Java语言使具有多线程的程序设计很容易,Java对线程提供内部语言支持,Java中的Thread类和Runnable接口使程序员很容易开发出多线程的应用程序。

如果计算机只有一个CPU,则在给定时刻只有一个执行线程。因为CPU迅速地在几个线程之间切换,从而造成了几个线程同时执行的假象,所以说单处理器系统只支持逻辑并发,而不支持物理并发。在多处理器系统上几个线程真正同时执行,实现物理并发。多线程程序的重要特征是:不管是否真正实现物理并发,多线程程序都支持逻辑并发。

10.动态性

JavaC++语言更具有动态性,更能适应不断变化的环境。Java不会因程序库某些部分的更新而需要全部重新编译程序,所以,在类库中可以自由地加入新的方法和实例变量,而不会影响用户程序的执行。并且Java通过接口(Interface)机制支持多重继承,使之比严格的类继承更具有灵活性和扩展性。

1.1.3  Java的核心技术

Java的核心技术是面向对象程序设计(Object-Oriented ProgrammingOOP)。OOP是近代软件设计领域的一大革命。在大型系统的开发中,OOP技术使得程序结构简单,相互协作容易,更重要的是提高了程序的重复使用率,降低了维护成本。

Java语言是一种完全面向对象的程序设计语言,它通过类、对象等概念来组织和构建整个程序,因此,理解面向对象的基本概念是学习Java的前提和基础。

1.类和对象

所谓对象就是真实世界中的实体,对象与实体是一一对应的。也就是说,现实世界中每一个实体都是一个对象,它是一种具体的概念。对象具有如下特征。

·    一个名字用来标识对象。

·    一组属性用来描述其特征。

·    一组方法用来实现其行为。

例如一个具体的灯泡,其形状、亮度等特征就是它的属性,其变亮、变暗等行为就是它的方法。再如一个叫“张三”的人,其属性包括肤色、身高、体重等固有特征,其方法包括吃饭、休息、成长等行为功能。

类是具备某些共同特征的对象的集合,用程序设计的语言来说,类是一种抽象的数据类型。例如,把一辆轿车、一辆公交车、一辆货车分别看成3个相互独立的对象,这3个对象之间有一些共同的特点,如它们都有大小、质量、轮子、转向盘等基本特征,都有启动、加速、减速、制动、转向等基本行为。将这些特点抽象到一起,就得到了一个集合的概念“汽车类”。

类是对对象的抽象,而对象是对类的具体化。面向对象的程序设计方法,首先是进行合理的抽象,即把问题中涉及的客观实体分割出来,抽取其共同的属性和方法;然后根据抽象出的结果设计可重复使用的类,通过类去定义一个个的对象(称为类的实例化);最后按照问题的要求,操作对象实现软件的功能。

2.类的封装、继承和多态

在面向对象的程序设计中,描述对象特征的属性由变量来表示,也称为数据;描述对象行为的方法由函数来实现。这样对象就是数据加方法。将数据及对数据的操作方法捆绑在一起构成类,就是所谓的封装。这是面向对象程序设计的重要特性之一。

无论一个对象方法的目的是什么,最终都表现为对对象数据的操作,包括把对象的状态告知外界以及改变对象的状态等。只要有足够的方法,就没有必要去直接操作对象的属性,对象与外界打交道全部通过其自身的方法来实现。封装性有效地把对象的属性隐藏在对象的内部,以避免属性被不正当地存取。同时,对于外界而言,不需要了解对象的方法是如何工作的,只需要知道对象有哪些方法以及如何调用这些方法。就好比一辆汽车要停车,你并不需要知道变速箱、液压系统、刹车系统等机构的细节如何运作,只要踩下离合器和刹车踏板即可。因此,封装使得程序的设计与实现有效地分开,降低了方法之间的相互依赖,提高了对象之间的独立程度,提升了程序的可维护性。

继承是指在一个已有类的基础上,通过添加新的数据和方法,从而构成一个新类的过程。继承是一种机制,它使得一个新类不仅拥有自己独特的数据和方法,而且具有被继承类的所有数据和方法却不用写重复的代码,实现了代码复用,方便了功能扩充。由继承得到的类称为子类,被继承的类叫做父类或超类。例如,创建了一个“手机类”,它有通话、发短信的功能,可以继承此类,创建一个子类“新手机类”,增加拍照功能,这样,新创建的子类不但有拍照功能,而且也有它的父类所具有的通话、发短信功能。通常,父类中只定义框架性内容,子类则在父类的基础上更加细化。

多态这个词从希腊文演变而来,意思是“许多状态”。在同一个类中可有许多同名的方法,但其参数数量与类型不同,这些同名不同参数的方法之间构成多态。

作为面向对象的程序设计语言,Java很好地实现了类的封装、继承和多态,这将在以后的内容中逐步展开学习。