第1章Java 简介

第1章Java 简介
第1章Java 简介

第1章Java 简介

1.1 概述

最近几年Internet的迅速发展及万维网WWW(World Wide Web)的日益普及和快速增长,使得整个计算机世界正在经历着深刻的变革。1989年超文本标记语言HTML(Hypertext Markup Language,超文本标记语言)和万维网WWW的产生是Internet数据描述语言的一次飞跃,万维网把全球的信息资源用HTML格式统一起来。1996年,Sun公司的Java语言正式发表,则是一次Internet的技术革命。在Internet上,Java语言和用Java编写的浏览器HotJava的出现在当时是特别引人注意的重大事件。Java的诞生从根本上解决了Internet 的异质、代码交换以及网络程序的安全性等诸多问题。其中Java语言是与平台无关的语言。Java语言程序编译后,生成字节代码,运行在Java虚拟机上。一个操作系统平台只要提供Java虚拟机,Java程序就可以在上面直接运行了。从理论上讲,Java语言程序可运行在所有的操作系统平台上,从而在根本上解决了Internet的异质问题。

Java语言不仅仅是一个程序设计语言,更是一个网络操作系统。因为:

(1)Java语言可不依赖于任何现有操作系统,而直接运行在某种机器或CPU上;

(2)Java语言有自己的内存管理机制;

(3)Java语言支持多线程程序,可对处理器资源进行分配和管理;

(4)Java语言可对设备进行管理,例如:屏幕、键盘、鼠标等;

(5)Java语言支持网络文件管理,Java语言可打开远程机器上的文件,Java语言文件的概念已经扩充到整个Internet网络。

1.1.1 Java的起源与现状

Java语言诞生于1991年,它是由Sun Microsystems的一个开发小组在开发Green项目时完成的。该项目最初是开发一种用于消费类电子产品的与平台无关的软件技术,主要用来解决诸如电视机、电话、闹钟等家用电器的控制和通信问题。开始时,该项目小组成员准备采用C++语言,但是他们感到C++语言太复杂,安全性也差,无法满足项目设计的需要,最后决定基于C++语言开发一种新的编程语言。该小组最初将其称为Oak(一种橡树的名字),后来正式改名为Java语言。在1991年到1993年期间,这种语言一直被认为是

用来开发消费类电子产品和交互式电视控制器的利器,但由于市场的因素,Sun在最后放弃了继续开发和研制。但随后Internet的异常火爆,使Sun看到了Oak在计算机网络上的广阔前景,于是通过改造,在1996年初正式推出了Java语言1.0版。

Java语言是面向对象的程序设计语言,特别适合于Internet应用程序的开发,它的硬件和软件平台无关性直接威胁到Windows和Intel的垄断地位。由于Java提供了强大的图形、图像、动画、音频、视频、多线程和网络交互能力,使它在设计交互式、多媒体网页和网络应用方面大显身手,成为当今推广速度最快的计算机编程语言。

1.1.2 Java是什么

Java TM是全新的计算机技术,它是建立在强大的网络和软件应该在不同的计算机系统上运行的思想上的。这些计算机系统包括消费型器件和其他一些设备。利用Java技术,能令人信服地让同一种应用在各种机器上运行,如:PC、Macintosh系统、计算机网络或者像Internet可视电话一样的新技术。

Java既可以看作是一种真正的程序设计语言,也可以看作是一个完整的平台。作为一种程序语言,它简洁、面向对象、安全、健壮并适用于Internet技术。而作为一个平台,它通过那些符合Sun公司发布的标准APIs开发的应用,在操作系统、数据库、中间件和其他第三方厂商提供的服务。

1.Java是面向对象的网络编程语言

Java是由Sun公司开发的新一代面向对象的网络编程语言。Java的目标是建立一种在任意一种机器、任意一种操作系统的网络环境中都能运行的软件。Java的原则是“程序只写一次,但可在任何时候、任何地方永远工作下去。”

Java是第一个能编写可嵌入Web网页中的所谓小应用程序(applets)的程序设计语言。Java使用户能够编写可以在支持该语言的计算机上正常运行的应用程序,甚至还可以编写既可作为普通的应用程序,又可作为小应用程序运行的程序。

Java是Internet上的世界语,它正日益成为客户机、数据库和其他服务器资源之间进行通信的“中间桥梁”,而且目前正流行的嵌入系统,也是Java的天地,成为了手持设备、因特网最好的编程语言之一。

Java也是最好的网络编程语言,它具有强大的移植性、多线程处理和联网能力,成为最适合于网络编程人员、最出色的编程语言之一。

2.Java是产业

“Java语言的出现,将会引起一场软件革命。”这是因为传统的软件往往都是与具体的实现环境有关,换了一个环境就需要重新做一番变动,造成人力和财力的浪费,而Java语言能在执行码(二进制码)上兼容,这样以前开发的软件就能直接运行在不同的机器上了。Java语言作为软件开发的一种革命性的技术,其作用和突出影响主要表现在以下几个方面:(1)目前计算机产业的许多大公司购买了Java语言的使用许可证,Java语言已经

得到了工业界的认可,如IBM、Apple、Adobe、Microsoft等公司都拥有了Java的使用许可证。

(2)众多的软件开发商开始支持Java语言的软件产品。今天的世界是以网络为中心的计算机时代,不支持HTML和Java语言,应用程序的应用范围只能局限于同质的环境中。

(3)Intranet(企业内部网)正在成为企业信息系统最佳的解决方案,而其中Java语言将发挥不可替代的作用。Intranet的目的是把Internet用于企业的内部信息系统,它的优点主要是便宜、易于管理和使用。用户不管使用何种类型的机器和操作系统,界面是统一的Internet 浏览器,而数据库、网页、应用程序则存在于WWW服务器上,无论是开发人员,还是管理人员或是用户都可以受益于该解决方案。

Java已经逐步从一种单纯的计算机高级编程语言发展成为一种重要的Internet平台,并进而引发、带动了Java产业的发展和壮大,成为当今计算机业界不可忽视的力量和重要的发展潮流与方向。

1.1.3 Java语言的特点

Java语言是由C++语言发展而来的,是一种彻底的纯面向对象的程序设计语言。作为一种纯面向对象的程序设计语言,它非常适合于大型软件的开发。同时它去掉了C++语言的一些容易引起错误的特性。例如:Java语言没有指针,避免了使用指针直接访问物理寄存器带来的风险;以及Java语言用接口代替了C++语言中容易引起混乱的多重继承机制等。

Java语言是一个简单的、面向对象的、分布的、解释的、健壮的、安全的、独立于平台的、可移植的、可扩展的、高性能的、多线程的、动态的程序设计语言。

1.Simple(简单)

Java语言最初是为家用电器进行集成控制而设计的一种语言,因此它必须简单明了,易于学习。Java语言与C++语言的风格极为相似,但却比C++语言简单得多,从某种意义上讲,Java语言是C/C++语言的一个变种。

我们想建立一种真正简单的系统,它允许使用者轻松地设计程序而不需要像现今的标准程序一样接受深奥的训练。目前大多数程序设计师都采用C语言,而面向对象程序设计师则大多使用C++。因此,即使我们发现C++并不适合我们,但在Java的设计上还是尽可能让它与C++相近,确保系统更容易被理解。

Java删除许多极少被使用、不容易理解和令人混淆的C++功能,这些功能在我们的使用经验中只能带来麻烦而非效益。删除的功能主要包括运算符重载(operator overloading)、多重继承(inheritance)以及广泛的自动强迫同型(automatic coercions);重载是指以一个辨识元参照多重项目,Java语言也提供重载函数,不过它重载的对象是方法(method)而非变量或运算符。

Java增加了自动内存垃圾收集(auto garbage collection)功能,因此简化Java程序工作,不过同时也让系统变得稍复杂一些。储存管理(storage management)是使C与C++应用程

序变得复杂的常见的一项原因,即关于内存的分配与释放。Java语言的自动垃圾收集功能(周期性地释放未被使用的内存)不仅简化了程序设计工作,而且能大幅度减少小错误(bugs)数量。

这些为程序开发者提供了丰富的类库,使程序编写变得容易、简单。类库包含有数百种预先写入的类,这些类可提供完成从简单任务到建立网络连接和访问数据库等复杂任务的方法。

Java使用的关键字集合比其他大多数语言要少得多。关键字在编程语言中有特殊的含义,编写语句时使用它们。Java的关键字只有48个。

确保Java“简单化”的另一特性在于“小而单纯”。Java的目标之一是要协助开发能独立地在小型机器上顺利执行的软件。Java的基本解释器(interpreter)和对象类(class)支援约占40KB,而若增加基本的标准程序库和线程(thread)支援(它实际上是一整自含式的微核心)需增加175KB。体积小对于在嵌入式的系统中的使用是很重要的,并因此Java 可以通过网络轻易下载。

2.Object-Oriented(面向对象语言)

简单地说,面向对象设计是一种以数据(对象)及其接口为重心的程序设计技术。我们以木匠举例:一位“面向对象”木匠最重视的是他想制作的椅子,其次才是他用来制作椅子的工具;相反的,一位“非面向对象”木匠则把主要的心思放在工具上。面向对象设计也是定义程序模块如何“即插即用”的机制。

面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心、以算法为驱动的话,面向对象的编程语言则是以对象为中心、以消息为驱动。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。

所有面向对象的编程语言都支持3个概念:封装、多态性和继承,Java也不例外。现实世界中的对象均有属性和行为,映射到计算机程序上,属性则表示为对象的数据,行为表示为对象的方法(其作用是处理数据或同外界交互)。所谓封装,就是用一个自主式框架把对象的数据和方法连在一起形成一个整体。可以说,对象是支持封装的手段,是封装的基本单位。Java语言的封装性较强,因为Java无全程变量,无主函数,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。而对于这些类型,Java也提供了相应的对象类型以便与其他对象交互操作。

多态性就是多种表现形式,具体来说,可以用“一个对外接口,多个内在实现方法”表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型、浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统即可自动选择。运算符重载(operator overload)一直被认为是一种优秀的多态机制体现,但由于考虑到它会使程序变得难以理解,所以Java 最后还是把它取消了。

继承是指一个对象直接使用另一对象的属性和方法。事实上,我们遇到的很多实体都

有继承的含义。例如,若把汽车看成一个实体,它可以分成多个子实体,如卡车、公共汽车等。这些子实体都具有汽车的特性,因此,汽车是它们的“父亲”,而这些子实体则是汽车的“孩子”。Java提供给用户一系列类(class),Java的类有层次结构,子类可以继承父类的属性和方法。与另外一些面向对象编程语言不同,Java只支持单一继承。

纯面向对象语言,程序代码以类的形式组织,由类来定义对象的各种状态和行为。面向对象的编程技术是当今世界软件开发中最常见的技术之一,Java就是一种新型的面向对象的程序设计语言,它使用类的软件对象,代码可重复利用并可扩展。这样,可以将这些由变量和方法组成的类作为一个模板,增加其他功能来创建其他的类,无须重写父类或超类的编码,使应用程序的开发变得更加简单和容易。

Java的面向对象设施实质上就是C++,并包含Objective C的一些延伸,以提供更为动态的解决方案。

3.Distributed(分布式)

Java拥有广泛的例程库(routine library),能轻易地处理TCP/IP协议,例如HTTP与FTP等。这使得在Java中比在C或C++中更容易创建网络连接。Java应用程序可以借由URL通过网络开启和存取对象,就如同存取一个本地(local)文件系统一样简单。

分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络的不同主机上;操作分布是指把一个计算分散在不同主机上处理。

Java支持WWW客户机/服务器计算模式,因此,它支持这两种分布性。对于前者,Java 提供了一个称作URL的对象,利用这个对象,可以打开并访问具有相同URL地址的对象,访问方式与访问本地文件系统相同。对于后者,Java的Applet小程序可以从服务器下载到客户端,即部分计算在客户端进行,提高系统执行效率。

Java提供了一整套网络类库,开发人员可以利用类库进行网络程序设计,方便地实现Java的分布式特性。

4.Interpreted(解释型)

Java是解释型的,它编译后并不生成特定的CPU机器代码,而是Java字节代码。而Java语言运行时要借助于Java语言运行系统(Java语言解释器,即Java虚拟机),首先该系统对Java语言编译后的字节代码进行解释,然后再执行它。Java虚拟机是与硬件、软件平台有关的,它使Java语言程序在某一特定硬件、软件平台环境中直接运行目标代码指令。这种链接程序通常比编译程序所需资源少,所以程序员可以花上更多的时间在创建源程序上,而不必考虑运行环境。

Java语言解释器直接对Java字节码进行解释执行。字节代码本身携带了许多编译信息,使得Java语言执行时的链接过程更加简单。

Java通过预先将源代码编译为接近机器指令的字节码,有效地克服了传统解释型语言的性能瓶颈,同时又保持了解释型语言的可移植性。Java解释器能直接在任何机器上执行Java字节码。

5.Robust(健壮)

Java将大量重点放在早期的静、动态检查,排除出现错误的条件,异常处理,取消指

针,内存保护等功能上。Java有一个指针模型,可以避免改写内存和毁损数据的情况发生。

强类型(strongly typed)语言例如C++的优点是允许在编译时进行深入的检查,以便提前发现错误。不幸的是,C++承袭了C在编译检查(compile-time checking)时的一些漏洞;C的检查较为松散,特别是在方法/过程声明方面。我们在Java中要求声明,但并不支持C风格的隐性声明。

连接器(linker)了解类型系统并重复执行许多已由编译器完成的类型检查,以避免出现版本不匹配问题。

Java与C/C++之间最大的不同点之一在于Java拥有一种指针(pointer)模型,能排除发生内存被覆盖和毁损数据的可能性。Java不采用指针算术法,而是提供真正的阵列。这允许程序执行下标检查;再者,它也不可能发生借由对象类型转换将一个任意整数转成指针的情形。Java语言程序不可能造成计算机系统的崩溃,因为Java语言系统会仔细检测对内存的每次访问,确认它是安全合法的,而且不至于引起任何问题。如果出现某种出乎意料的事情,系统不会崩溃,而把该例外抛弃。系统会发现该类例外,并加以处理。

许多动态语言例如Lisp、TCL与Smalltalk等,通常被用来制作原型程序(prototyping)。它们在这方面成功的理由是因为它们都非常健壮(robust),让程序设计师不再怕处理内存问题,因为他们不须担心内存失败。Java即拥有这项特性。Java程序员相对地可以不害怕处理内存问题,因为在Java中不存在指针,Java程序不可能意外覆盖一片内存缓冲区的末尾。Java程序也不可能非法访问内存,但这些在C或C++中都有可能发生。

动态语言适合开发原型程序的理由之一,就是它们不会在开发初期就要求程序员拟定明确的决策。Java刚好相反,它强迫你明确地做选择。这些选择伴随许多辅助:用户可以编写方法调用(method invocations),而如果有某些错误的地方,将会在编译时获得通知,而不须担心方法调用上的错误。

6.Secure(安全性)

Java将重点用于网络/分布式运算环境,确保建立无病毒且不会被侵入的系统。内存分配及布局由Java运行系统决定,字节码验证,可以轻松构建出防病毒、防黑客的系统。

Java最初设计目的是应用于电子类消费产品,因此要求较高的可靠性。Java虽然源于C++,但它消除了很多C++不可靠因素,可以防止许多编程错误。首先,Java是强类型的语言,要求显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠;其次,Java不支持指针,杜绝了内存的非法访问;第三,Java的自动单元收集防止了内存丢失等动态内存分配导致的问题;第四,Java解释器运行时实施检查,可以发现数组和字符串访问的越界;最后,Java提供了异常处理机制,程序员可以把一组错误代码放在一个地方,这样可以简化错误处理任务,便于恢复。

由于Java主要用于网络应用程序开发,因此对安全性有着较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。当Java字节码进入解释器时,首先必须经过字节码校验器的检查,然后,Java解释器将决定程序中类的内存布局。随后,类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰破坏。最后,客户端用

户还可以限制从网络上装载的类只能访问某些文件系统。上述几种机制结合起来,使得Java 成为安全的编程语言。

7.Architecture-Neutral(平台无关性)

Java是平台无关的语言,是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。平台无关有两种:源代码级和目标代码级。C和C++具有一定程度的源代码级平台无关,表明用C或C++写的应用程序不用修改只需重新编译就可以在不同平台上运行。

Java主要靠Java虚拟机(JVM)在目标代码级实现平台无关性。JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚拟机器指令,并有自己的栈、寄存器组等。但JVM通常是在软件上而不是在硬件上实现(目前,SUN系统公司已经设计实现了Java 芯片,主要使用在网络计算机NC上。另外,Java芯片的出现也会使Java更容易嵌入到家用电器中)。JVM是Java平台无关的基础,在JVM上,有一个Java解释器用来解释Java 编译器编译后的程序。Java编程人员在编写完软件后,通过Java编译器将Java源程序编译为JVM的字节代码。任何一台机器只要配备了Java解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。另外,Java采用的是基于IEEE标准的数据类型。通过JVM保证数据类型的一致性,也就确保了Java的平台无关性。

Java的设计目标是要支援网络应用程序。一般而言,网络是由许多不同的系统构成的,包括各种CPU与操作系统结构。为了让Java应用程序能够在网络上任何地方执行,其编译器会产出一种具备结构中立性(architecture neutral)的目标文件格式。编译后的程序码可以在提供Java runtime系统的多种不同处理器上执行。

这不仅对网络应用很有帮助,而且也适合单一系统软件流通。在目前的个人电脑市场上,应用程序发展者必须为他们的程式分别编写IBM PC和Apple Macintosh相容版本。现在,PC市场正(通过Windows/NT)分散成许多CPU结构,而Apple则从68 000转向PowerPC,这些事实使得我们几乎不可能设计出能在所有平台上执行的软件。但是Java允许同一版本的应用程序在所有平台执行。

Java编译器是借由产出与某一计算机结构无关的字节代码指令,以达到上述功能。它们能轻易地在任何机器上解释,并且动态地转换成原生模式的机器码。

Java应用程序能够在网络上任何地方执行,实现了字节代码平台无关性、语言版本完全统一无关性的特性,同时访问底层操作系统功能的扩展类库也不依赖于具体系统。Java 编译器生成的是一种与平台无关的文件格式,只要用户安装了Java运行时间库,编译好的代码就可以在很多处理器上执行。它能生成特殊字节码指令,同任何一种特定的计算机系统都无关。它不仅在任何机器上都易于解释,也易于动态翻译成本机代码。

8.Portable(可移植)

与平台无关的特性使Java程序可以方便地被移植到网络的不同平台上。同时,Java的类库也实现了与不同平台的接口,使得这些类库可以移植。另外,Java编译器是由Java语言实现的,Java运行系统由标准C语言实现,这使Java系统本身也具有可移植性。没有与具体环境有关的概念,其原始数据类型的大小是固定的,而且Java本身环境也具有很强的可移植性。

9.Multi-Threaded(多线程)

线程是操作系统的一种新概念,它又被称作轻量进程,是比传统进程更小的、可并发执行的单位。C和C++采用单线程体系结构,而Java却提供了多线程支持。

Java语言嵌入了对并发控制的功能——多线程控制,大大简化了多线程应用程序的开发。多线程的优点是具有更好的交互性以及实时行为。多线程和进程两者是既有区别,又有联系的。进程是指一个正在运行当中的程序,它有自己管理的一组系统环境和一个独立的存储空间。进程的特点是它所涉及的数据、内存是独立的。所以,多进程系统一定带有进程之间的通信机制,而为了实现进程通信,就要花费很多时间,也会让系统花费许多开销。线程也是指一个正在运行中的程序。但两者的区别是,可以多个线程共用同一个内存区域,也共享同一组系统资源。对每个线程来说,只有堆栈和寄存器数据是独立的。所以,线程之间进行通信和切换时,系统开销要比进程机制小得多。

Java在两方面支持多线程。一方面,Java环境本身就是多线程的,若干个系统线程运行负责必要的无用单元回收、系统维护等系统级操作;另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序开发。Java提供了一个类Thread,由它负责启动运行,终止线程,并可检查线程状态。Java的线程还包括一组同步原语,这些原语负责对线程实行并发控制。利用Java的多线程编程接口,开发人员可以方便地写出支持多线程的应用程序,提高程序执行效率。必须注意的是,Java的多线程支持在一定程度上受运行时支持平台的限制。例如,如果操作系统本身不支持多线程,Java的多线程特性可能就表现不出来。

10.Dynamic(动态)

Java语言的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行,并且Java语言通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。这就是Java语言的动态特性,它可以动态地从本地或网上加载类。Java语言的类有运行时的表述,这样Java程序在运行时可以分辨类之间的关系和类型信息以及把一个类动态地链接到运行系统中去。

Java语言的动态特性也是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是C++语言进行面向对象程序设计所无法实现的。在C++程序设计过程中,每当在类中增加一个实例变量或一种成员函数后,引用该类的所有子类都必须重新编译,否则将导致程序崩溃。

11.可收集无用存储单元

用C/C++编写软件的编程人员必须仔细跟踪所用的内存单元,当某一单元不再使用时,他们务必让程序释放它,方可再用。在大的项目中,这可能很困难,并往往成为出错和内存不足的根源。

在Java语言的情况下,编程人员不必为内存管理操心,Java语言系统有一个称作“无用单元收集器”的内置程序,它扫描内存,并自动释放那些不再使用的内存单元。

Java语言的这种自动垃圾收集机制,对不再被程序引用的对象自动取消其所占资源,这就彻底消除了出现存储器泄漏之类的错误,并免去了程序员管理存储器的繁琐工作。

1.1.4 Java语言应用

随着Java的发展,Java在各行各业已经逐步展现了它强大的功能并得到广泛的应用。在软件工程领域,由于面向对象的分析和设计技术已经日显优势,而Java以其独特的面向对象的语言特点能够和面向对象分析(Object-Oriented Analysis,OOA)以及面向对象设计(Object-Oriented Design,OOD)构成一个整体,从而发展为面向对象的编程(Object-Oriented Programming),所以Java受到软件工程开发设计者的青睐。在网页动画方面,Java特有的小程序(Applet)可以镶嵌到HTML网页上,而且能使动画效果更加逼真,同时,由于参与到了网络里,所以Java在此方面也正在显示着它的优势。另外,利用Java的远程方法调用(Remote Method Invocation,RMI)技术、Java命名目录接口(Java Naming Directory Interface,JNDI)技术,也可以允许网络上的一个使用者自由地运行网络上某个节点上的应用程序,或者获得网络节点上的资源,这在分布式的网络编程上起到了重要的作用。还有采用Java提供的统一接口可以实现和不同数据库平台的连接,从而可以获得不同种类数据库内的存储信息。

Java语言有着广泛的应用前景,大体上可以从以下几个方面来考虑其应用:

(1)所有面向对象的应用开发,包括面向对象的事件描述、处理、综合等。

(2)计算过程的可视化、可操作化的软件开发。

(3)动态画面的设计,包括图形图像的调用。

(4)交互操作的设计。

(5)Internet的系统管理功能模块的设计、Web页的动态设计、管理交互操作设计等。

(6)与各种数据库连接查询的SQL语言实现。

1.2 Java应用程序和小程序

用Java可以写两种类型的程序:小程序(又叫Java Applet)和应用程序(Java Application)。

小程序是嵌入在HTML文档中的Java程序;而Java应用程序是从命令行运行的程序。对Java而言,Java小程序的大小和复杂性都没有限制。事实上,Java小程序有些方面比Java 应用程序更强大。但是由于目前Internet通信速度有限,因此大多数小程序规模较小。小程序和应用程序之间的技术差别在于运行环境。Java应用程序运行在最简单的环境中,它的惟一外部输入就是命令行参数。另一方面,Java小程序则需要来自Web浏览器的大量信息:它需要知道何时启动,何时放入浏览器窗口,何处、何时激活关闭。由于这两种不同的执行环境,小程序和应用程序的最低要求不同。

小程序的发布十分便利,因此小程序更适合作为Internet上的应用程序。相反,非网络

系统和内存较小的系统更适合用Java应用程序而较少用Java小程序实现。另外,Java应用程序也很容易以Internet为基础环境,事实上有些优秀的Java应用程序正是如此。

应用程序(Java Application)是可以独立运行的Java程序,由Java解释器控制执行。Applet则不能独立运行,而是被嵌入到Web页中,由Java兼容浏览器控制执行。

1.2.1 Java虚拟机

Java程序在编译后生成的不是某种CPU的指令码,而是Java语言特有的字节代码。Java 字节代码运行在Java虚拟机上。Java虚拟机类似一个小巧而高效的CPU。Java虚拟机底层的运行系统把字节代码转化成实际的硬件调用,但是,Java语言的虚拟机未必非要运行在操作系统上,它的下面可以直接是各种CPU芯片。

每一种操作系统的Java解释器是不同的,但实现Java虚拟机是相同的,这就是Java 语言与平台无关的关键所在。Java虚拟机由五部分组成:一组指令集、一组寄存器、一个堆栈、一个无用内存单元收集器、一个方法区域,这五部分是Java虚拟机的逻辑抽象成分,不依赖于任何实现技术或组织,但是它们的功能必须在真实机器上以某种方式来实现。Java 虚拟机内存区域不依赖实际内存的位置,也不要求连续,但要求逻辑的长度固定。

Java虚拟机支持240多个字节代码,每个字节代码执行一种基本的CPU运算。Java 语言指令集相当于Java语言程序的“汇编语言”,Java语言指令集的一条指令有一个操作码、零个或多个操作数。操作数指定实施的操作,操作数是操作码所需要的参数。Java语言的操作码均为一个字节长,操作数没有限制。

Java虚拟机的寄存器用于保存机器的运行状态,它和微处理器中的寄存器很类似。Java 虚拟机寄存器有4种:Java语言程序计数器,指向操作数栈顶端的指针,指向当前执行方法的执行环境的指针,指向当前执行方法局部变量区中第一个变量的指针。Java虚拟机是用堆栈来处理数据传递的,它不定义或使用寄存器来传递或接受参数,目的是为了保证指令集的简洁性和实现时的高效性。

Java虚拟机的堆栈有3个区域:局部变量区、执行环境区和操作数区。

Java虚拟机的堆栈是运行时刻动态分配的对象存储区域。Java语言可以进行自动的无用内存单元的收集,程序无须显示释放占有的内存空间,无用内存单元自动回收的算法依赖于虚拟机最终实现的硬件环境。

Java虚拟机的方法区是编译后的代码区域,包含方法代码、符号表等。

1.2.2 J2SDK实用程序

要创建一个Java程序,必须进行3个步骤:

(1)创建带有文件扩展名.Java的源文件。

(2)使用Java编译器创建一个带有文件扩展名.class的字节码文件。

(3)使用Java解释器运行该程序。

一般,我们使用Windows环境中记事本作为创建源文件的文件编辑器,创建的源文件只是一种含有Java代码的普通文本文件。源文件的名称必须以句点结束,后面紧跟文件扩展名.java。

注意:Java源文件必须以.java扩展名结束。

1.Javac

Java编译器的名称是Javac,用来将Java源程序编译成字节码的程序。Java源程序扩展名为.java的文本文件,编译时首先读入Java源程序,然后进行语法的检验,如果出现问题的话就终止编译。语法检查通过后,生成可执行程序代码即字节码。字节码文件名和源文件名相同,扩展名是.class。

一旦创建的Java源文件被Java编辑器编译运行,生成字节码文件,那么,这个字节码文件就能够在任何一台个人计算机上运行,而不必修改。这也就是Java所具有的“一次编写,随处运行”的特色所在,具有很强的可移植性,所编写的Java程序能够运行于数百种平台上。在每种平台上的Java解释器都可以直接解释和执行字节码文件的内部命令。

在“命令提示符”窗口中输入编译器文件名和编译的源程序文件名,按回车键即开始编译。如果源程序没有错误,则屏幕上没有输出,否则将显示出错信息。

我们尝试一下如何编译HelloWorld.java程序,首先把程序复制到C:\j2sdk1.4.2_02\bin 子目录下(具体目录读者可以根据需要自己在本地机上安装、建立),然后执行编译命令,如图1.1所示。

图1.1 编译HelloWorld.java程序演示

2.Java

Java解释器的名称是Java,直接从类文件解释和执行Java应用程序。Java解释器负责将编译后的字节码解释为本地计算机代码。Java的平台无关性就是因为每一种计算机上都安装了一个合适的解释器。解释器建立了一个运行平台即Java虚拟机,将不同计算机上的系统差别隐藏起来,使字节码面对一个相同的运行环境,实现了“写一次,到处用”的目标。

注意:Java源文件必须具有.java扩展名,Java字节码文件必须具有.class扩展名。

对于Applet来说,Web浏览器或Applet查看器都有内置的解释器,并负责提供Applet 所需要的图形界面。

Application可通过解释器来运行。它可以脱离浏览器单独运行,不再需要HTML文件。运行Application非常简单,将应用程序编译成字节码就可以用java.exe运行。

窗口应用程序运行命令如图1.2所示。其中HelloWorld是字节码文件名,不加扩展名,还要注意区分大小写,helloworld不等于HelloWorld。

图1.2 Java文件运行命令

3.appletviewer

小程序浏览器,执行HTML文件中的Java小程序,即Applet。它是个模拟浏览器,可以显示Applet的运行结果。使用appletviewer比较方便,因为它仅显示有关的Applet的内容,而浏览器通常还要显示Web页面的内容。同时也要注意,appletviewer不能直接运行字节码文件,而是打开含有Applet字节码的HTML文件。这个HTML文件需要另外建立,具体操作步骤将在后面的内容中介绍。

在“命令提示符”窗口中作者所设置的C:\j2sdk1.4.2_02\code\01路径下,输入命令:appletviewer HelloWorldApplet.html

就可以打开已有的HTML文件HelloWorldApplet.html,如图1.3所示。图1.4是其在Web 页中的模拟运行结果。

图1.3 Java Applet文件运行命令

图1.4 Java Applet程序运行结果

4.Applet小程序开发

Applet程序中必须包含java.applet.Applet类的子类,该子类就是Applet小程序的主类。系统类Applet中已经定义了很多的成员域和成员方法,它们规定了Applet小程序如何与执行它的解释器——WWW浏览器配合工作。

主方法——被浏览器自动调用的方法,包括:

●init()

●start()

●stop()

●destroy()

●paint()

当Applet下载时,浏览器首先创建Applet实例并调用init()方法进行初始化工作,然后调用start()方法开始Applet小程序的执行。当用户离开小程序所在页面时,浏览器调用stop()方法停止小程序执行。当用户重新进入小程序页面时,就再调用start()方法。当用户退出浏览器时,浏览器调用destroy()方法并释放资源。每当需要时,浏览器调用paint()方法重画界面。所以在编写Applet小程序时,就可以根据需要重新编写这些方法。

第一章初识Java

第一章:初识Java (一)Java可以做什么? 1、开发安装和运行在本机的上桌面程序。 2、开发通过浏览器访问的面向Internet的应用程序。 (二)应用最广泛的两种Java技术 1、JavaSE:全称是Java Platform Standard Edition(Java 平台标准版),提供基础的Java开发工具、执行环境和应用程序接口(API),主要用于桌面应用程序的开发。 2、JavaEE:全称是Java Platform Enterprise Edition(Java 平台企业版),主要用于网络程序和企业级应用的开发。 JavaSE是Java语言的核心,JavaEE是在JavaSE的基础上扩展的,JavaSE提供了Java的运行环境,使用开发出的应用程序能够在操作系统上运行。 (三)开发Java程序的步骤 1、编写源程序。可以使用记事本编写,使用Java语言编写,保存后将扩展名改为.java即可。 2、编译。编译器将.java程序代码翻译转换为计算机能够识别的机器代码,扩展名为.class。 3、运行。在Java平台上运行编译后的文件,便可查看到运行的结果。 Java 开发工具包为:JDK 6(Java Development Kit),由Sun 公司免费提供,可从Oracle公司网站上下载。

例1.1:编写第一个程序HelloWorld.java 1、打开记事本,输入以下内容并保存为文件HelloWorld.java。 public class HelloWorld{ public static void main(string[],args){ System.out.println(“Hello World!!!”); } } 2、进入DOS控制台,输入“javac HelloWorld.java”后回车,编译生成HelloWorld.class。 3、继续在DOS控制台中输入“java HelloWorld.clss”后回车,显示运行结果: Hello World!!! | (四)Java程序结构(使用注释说明) //我的第一个Java程序 public class HelloWorld{ //命名类名 public static void main(string[],args){ /* *上一行使用main()方法 *是Java程序的入口,起始点 *一个Java程序中只能有一个main()方法 */

第1章 Java语言概述

第1章Java语言概述 本章知识目标: ?了解面向对象程序设计的特性。 ?掌握Java应用程序和Applet程序的调试过程。 ?了解Java的开发与运行环境。 ?了解Java语言的特点。 Java语言从1995年问世至今,得到众多厂商的支持,成为软件开发的主流技术。Java 是面向对象的程序设计语言,拥有跨平台、多线程等众多特性,在网络计算中得到广泛应用。 1.1 面向对象程序设计的特性 早期的编程语言如Fortran、C等都是面向过程的语言,面向过程编程的一个明显特点是数据与程序是分开的。但随着计算机软件的发展,程序越做越大,软件维护也日益困难。面向对象编程贴近于人类思维方式,面向对象的软件开发将事物均看作对象,对象有两个特征:状态与行为,对象可以通过自身的行为来改变自己的状态。最新的程序设计语言一般为面向对象的语言,面向对象程序设计具有如下四大特性。 1.封装性(Encapsulation) 面向对象的第一个原则是把数据和对该数据的操作都封装在一个类中,类的概念和现实世界中的“事物种类”是一致的。例如,电视机就是一个类,每台电视机都有尺寸、品牌、频道等属性。我们可用on/off开关来开启电视,通过更改频道让电视机播放不同的节目。 对象是类的一个实例化结果,对象具有类所描述的所有属性以及方法。对象是个性化的,在程序设计语言中,每个对象都有自己的存储空间来存储自己的各个属性值,有些属性本身又可能由别的对象构成。 每个对象都属于某个类。面向对象程序设计就是设计好相关的类,类中有属性和方法。在统一建模语言UML中使用如图1-1所示的符号来描述对象和类的结构,其中,属性用来描述对象的状态,而方法则用来描述对象的行为。 2.继承性(Inheritance) 继承是在类、子类以及对象之间自动地共享属性和方法的机制。类的上层可以有父类,下层可以有子类,形成一种层次结构,如图1-2所示。一个类将直接继承其父类的属性和方法,而且继承还具有传递性,因此,它还将间接继承所有祖先类的属性和方法。例如,

第一章 初识Java

第一章初识Java # 1.什么是程序 ## 1.1 生活中程序 就是我们完成某一件事情的一些过程/动作的组合。 ## 1.2 代码【计算机】程序 明确:程序是为了模拟以及解决生活中的一些事情。 就是一些列指令的集合。Java只是众多编写程序的一种语言,还有比如C/C#/C++/Python/VB 等 # 2.Java的发展简介 1.95年,java诞生 2.98年,java1.2 ,此时分为三个版本【技术架构】 ①J2SE:java标准版 ②J2EE:java企业版 ③J2ME:只要做一些消费者产品的嵌入式开发 3.2004年:java1.5,java5,此时jdk版本新增了一些新特性,比如可变参数、泛型等等 4.2005年:java6,此时 ①JavaSE【J2SE】:主要做一些桌面开发,比如迅雷、快播等客户端软件。但是不是java的强项。 ②JavaEE【J2EE】:做一些企业级应用,比如淘宝、京东等电商网站,很多银行的网站,公司的一些内部系统,比如OA、CRM、ERP等系统。 ③JavaME【J2ME】:主要做一些嵌入式的消费类产品,目前主要以Android为主吧。 # 3.为什么学java 1.软件开发整体薪资还是客观的,而且涨幅也比较大,基本不出差 2.入门比较容易,很多东西我们都是在别人的基础上做的

3.Java的职业路比较宽,从Java转大数据库【Hadoop】开发、安卓都相对比较容易。还可以往其他职业路线去发展【产品经理、需求分析、项目经理等】 4.开源产品特别多,对于技术选型比较灵活。 5.Java岗位的需求量特别大 6.可以开发的程序类型很多,比如桌面程序、企业级应用等等 7.在开发语言排行中No1,是第一名和第二名的总和还多一点。 # 4.JDK的安装注意事项 1.安装的目录,建议开发相关软件统一在一个目录管理; 2.安装的时候,不要用中文或空格,下划线_可以的 3.建议:在配置环境变量的时候,使用JAVA_HOME=jdk的安装目录,然后在path变量中使用%JAVA_HOME%\bin,注意:path中的其他东西不要删 JDK:Java Development kit,java开发工具集 jre+工具集 JRE:Java Runtime Environment,java运行时环境 JVM:java虚拟机,核心语法等等,看成是一个运行.class的小型计算机 # 5.开发程序 ## 5.1 三步骤 1.编写源代码,即Xxx.java文件。【给程序员看的】 2.编译,编译后的文件类型,Xxx.class文件,给【JVM看的】 3.运行 ## 5.2 使用记事本开发java程序

第1章Java 简介

第1章Java 简介 1.1 概述 最近几年Internet的迅速发展及万维网WWW(World Wide Web)的日益普及和快速增长,使得整个计算机世界正在经历着深刻的变革。1989年超文本标记语言HTML(Hypertext Markup Language,超文本标记语言)和万维网WWW的产生是Internet数据描述语言的一次飞跃,万维网把全球的信息资源用HTML格式统一起来。1996年,Sun公司的Java语言正式发表,则是一次Internet的技术革命。在Internet上,Java语言和用Java编写的浏览器HotJava的出现在当时是特别引人注意的重大事件。Java的诞生从根本上解决了Internet 的异质、代码交换以及网络程序的安全性等诸多问题。其中Java语言是与平台无关的语言。Java语言程序编译后,生成字节代码,运行在Java虚拟机上。一个操作系统平台只要提供Java虚拟机,Java程序就可以在上面直接运行了。从理论上讲,Java语言程序可运行在所有的操作系统平台上,从而在根本上解决了Internet的异质问题。 Java语言不仅仅是一个程序设计语言,更是一个网络操作系统。因为: (1)Java语言可不依赖于任何现有操作系统,而直接运行在某种机器或CPU上; (2)Java语言有自己的内存管理机制; (3)Java语言支持多线程程序,可对处理器资源进行分配和管理; (4)Java语言可对设备进行管理,例如:屏幕、键盘、鼠标等; (5)Java语言支持网络文件管理,Java语言可打开远程机器上的文件,Java语言文件的概念已经扩充到整个Internet网络。 1.1.1 Java的起源与现状 Java语言诞生于1991年,它是由Sun Microsystems的一个开发小组在开发Green项目时完成的。该项目最初是开发一种用于消费类电子产品的与平台无关的软件技术,主要用来解决诸如电视机、电话、闹钟等家用电器的控制和通信问题。开始时,该项目小组成员准备采用C++语言,但是他们感到C++语言太复杂,安全性也差,无法满足项目设计的需要,最后决定基于C++语言开发一种新的编程语言。该小组最初将其称为Oak(一种橡树的名字),后来正式改名为Java语言。在1991年到1993年期间,这种语言一直被认为是

java 第一章

第 1 部分
第1章
实 用 教 程
Java EE 简介
1996 年,Sun Microsystems 公司推出了一种新的纯面向对象的编程语言——Java。 根据不同的应用领域,将 Java 语言划分为三大平台: ① Java Platform Micro Edition,简称 Java ME,即 Java 平台微型版。主要用于开发掌上 电脑、手机等移动设备使用的嵌入式系统。 ② Java Platform Standard Edition,简称 Java SE,即 Java 平台标准版。主要用于开发一 般台式机应用程序。 ③ Java Platform Enterprise Edition,简称 Java EE,即 Java 平台企业版。主要用于快速 设计、开发、部署和管理企业级的软件系统。 本书将着重介绍 Java EE 的实际应用。
1.1
Java EE 应用概述
Java EE 是目前开发 Web 应用(特别是企业级 Web 应用)最流行的平台之一,其实 Java Web 应用的核心技术是 JSP、Servlet 与 JavaBean。但遗憾的是,一直没有一套有效的开发规 范来约束 JSP 程序员,导致不同程序员写出不同风格的 JSP 程序。项目的规模越大,这种弊 端就越明显,项目的维护难度可见一斑。这时,一个基于 Web 框架开发的 Web 应用时代已 经来临。继 Struts 成功推出之后,大批优秀的框架紧跟其后,席卷了整个市场,本书将介绍 几个市场上常用的非常优秀的框架。到现在为止,Java EE 应用已经趋于成熟,但其形成的 组件却在不断升级、更新。首先,JDK(Java 软件开发包)的版本在不断提升,其服务器也 是各种各样,百家争鸣,本书将应用 Tomcat 作为开发服务器。就 IDE(集成开发环境)而 言, 本书将用现在非常流行的 Eclipse 和 My Eclipse 作为开发工具。 下面将介绍它们的安装、 配置及使用方法。
1.2
1.2.1
Java EE 开发环境的构建
JDK 的安装与配置
安装 Java 开发包(Java 2 Software Development Kit,简称 JDK)是进行 Java 软件开发 的前提,其最新版本为 JDK 1.7,但 JDK 1.6 仍是目前最常用的版本,所以本书所有范例都 是基于 JDK 1.6 开发的。软件可以在 Sun 公司的官方网站下载,其安装过程非常简单,这里 就不再赘述了,本书安装的目录是“D:\Program Files\Java\jdk1.6” 。 通过设置系统环境变量,告诉 Windows 操作系统 JDK 1.6 的安装位置。下面具体介绍 设置系统环境变量的方法。 ① 设置系统变量 JAVA_HOME。右击【我的电脑】图标,选择【属性】→【高级】→ 【环境变量】菜单项,弹出“环境变量”对话框,如图 1.1 所示。在【系统变量】中单击【新 建】按钮,弹出“新建系统变量”对话框,在“变量名”文本框中输入“JAVA_HOME”“变 ,

相关主题
相关文档
最新文档