第1章 Java语言概述

第1章 Java语言概述
第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所示。一个类将直接继承其父类的属性和方法,而且继承还具有传递性,因此,它还将间接继承所有祖先类的属性和方法。例如,

抽象概念“物体”可包含重量和体积的属性,其所有子类将继承这些属性。

图1-1 类的表示图1-2 类的继承层次

继承最主要的优点是重复使用性,在继承已有类的基础上加以改写,进而功能得到不断扩充,这样既可得到程序共享的好处,又可提高软件开发的效率。

当父类繁衍出许多子类时,它的行为接口通过继承可以传给其所有子类。因此,可以通过统一的行为接口去访问不同子类对象的行为,但不同子类中具体行为的实现可能不一样。在子类中对父类中定义的行为重新定义是下面将介绍的多态性的一种体现。

3.多态性(Polymorphism)

多态是指在表示特定功能时,有多种不同的形态或实现方法。常见的多态形式有以下两种:

(1)方法的重载(overloading)。即在同一个类中某个方法有多种形态。方法名相同,但参数不同,所以也称参数多态。

(2)方法的覆盖(overriding)。对于父类的某个方法,在子类中重新定义一个相同形态的方法,这样,在子类中将覆盖从父类继承来的那个方法。

多态为描述客观事物提供了极大的能动性。参数多态提供方法的多种使用形式,这样方便使用者的调用;而覆盖多态则可使我们以同样的方式对待不同的对象,不同的对象可以用各自的方式响应同一消息。通过父类定义的变量可引用子类的对象,执行对象方法时则表现出每个子类对象各自的行为,这种特性也称运行时的多态性。

4.抽象性(Abstraction)

这里,抽象有两个层次的含义。一是体现在类的层次设计中,高层类是底层类的抽象表述。类层次设计体现着不断抽象的过程。许多类是抽象出来的概念,例如,图1-2中的“物体”、“水果”。特别是,Java中有一个Object类,它处于类层次结构的顶端,该类中定义了所有类的公共属性和方法。可以用Object类的变量去引用任何子类的对象,通过Object对象引用能访问的成员,在子类中总是存在的。

二是体现在类与对象之间的关系上,类是一个抽象的概念,而对象是具体的。面向对象编程的核心是设计类,但实际运行操作的是对象。类是对象的模板,对象的创建是以类为基础的。同一个类创建的对象具有共同的属性,但属性值不同。

1.2 Java开发和运行环境

Java开发和运行环境有很多,例如,Oracle公司的JDK、NetBeans,开源组织提供的Eclipse,Xinox公司的JCreator,Spring Source公司的STS等。

在以上工具中,只有JDK是字符环境,其他均是图形环境。JDK可以从Oracle公司的主页下载,最新版本是JDK1.7,在Windows下的32位版本为。JDK包括运行环境和开发工具(编译器、调试器、工具库等)。Java的运行环境JRE(Java Runtime Environment),也称Java虚拟机,包含在JDK中,也可单独下载安装,其主要担负以下三大任务:(1)加载代码——由类加载器执行。

(2)检验代码——由字节码校验器执行。

(3)执行代码——由运行时解释执行。

JDK下载后需要安装,单击下载的文件包即可安装,默认安装的路径是C:\Program Files\Java\jdk1.7.0_45\,安装完毕后会在此目录下建立5个子目录。

(1)bin目录:存放JDK的可执行程序,如、、等。

(2)db目录:含JDK附带的一个轻量级的关系数据库,名为Derby。

(3)include目录:存放用于本地方法的文件。

(4)jre目录:是java的运行环境,如果只是为了能够运行Java字节码,可以只安装JRE,它会在系统中已安装的浏览器下安装相应的解析环境,使浏览器能够运行Java程序。

(5)lib目录:含有一些库文件。

1.3 Java程序及调试步骤

根据结构组成和运行环境的不同,本书介绍的Java程序可以分为Java应用程序(Java Application)和小应用程序(Java Applet)两类。

1.3.1 Java应用程序的调试

本节将以Java应用程序为例介绍程序的调试过程。调试Java应用程序包括编辑、编译、运行3个步骤,如图1-3所示。

1.编辑源程序

可以用任意文本编辑器(如Edit、记事本或IDE集成开发环境中的编辑窗口)编辑源程序文件。为方便调试程序,保存Java源程序的存放目录位置通常与DOS命令提示符所显示的路径要一致。以下几个DOS命令在调试Java程序时常用到。

图1-3 调试程序的过程

(1)更换当前盘

命令格式:盘符

例如,以下命令将DOS的当前盘从E盘更换到D盘。

E:/>d:

(2)进入当前目录的子目录

命令格式:cd 子目录名

(3)显示当前目录下的文件列表

命令格式:dir

(4)文件改名

命令格式:rename 旧文件名新文件名

【例1-1】简单Java程序()。

程序代码如下:

#01 class Hello {

#02 public static void main(String[ ] args) {

#03 .println("Hello World!");

#04 }

#05 }

【说明】

(1)Java源程序文件必须以.java的扩展名结尾。

(2)每个Java程序由若干类构成,再简单的Java程序也必须包括一个类。第1行用关键字class来标志一个类定义的开始,Hello为类名。

(3)在类体中,第2行定义了main()方法头,其中main为方法名。方法名后的一对小括号中定义了方法的参数形态;public表示该方法的访问是公开的;static表示该方法是一个静态方法;void表示该方法无返回值。main()方法是Java 应用程序的执行入口。

(4)方法体中安排方法执行的语句序列,第3行的语句是一条方法调用语句,表示引用System类(Java语言基础类库中一个类)的out属性(代表标准输出流对象)的println()方法,该方法将其参数“Hello World!”在标准输出设备(显示器)上输出。每条语句必须以“;”结尾。

【注意】

(1)Java应用程序主类(包含main()方法的类)的类名通常和文件名一致。

(2)Java语言是大小写敏感的语言,Java的文件名以及程序中的符号均要严格注意大小写,如果把class写成Class或CLASS都是错误的。

2.编译生成字节码文件(.class)

在JDK的运行环境下,程序的编译和运行均需要在DOS命令行方式下输入命令。编译用到Java编译器程序(),它将Java源程序文件(.java)编译后产生一个对应的字节码文件(.class)。

命令格式:javac 文件名.java

例如:javac

【注意】输入的文件名后必须加有扩展名.java。

如果出现找不到javac执行程序的错误,则需要将Java安装目录的bin子目录设置到DOS的搜索路径(path)下。解决办法有以下两种。

(1)如果JDK安装在C:\Program Files\Java\jdk1.7.0_45\目录下,则可以这样设置:path=%path%;C:\Program Files\Java\jdk1.7.0_45\bin

其中,%path%代表path环境变量原来的值。

(2)在Windows桌面中,右击“我的电脑”,在弹出的快捷菜单中选择“属性”→“系统属性”→“高级”→“环境变量”命令,弹出“环境变量”对话框,如图1-4所示,选择系统环境变量Path,单击“编辑”按钮,出现如图1-5所示的“编辑系统变量”对话框,在“变量值”文本框中添加C:\Program Files\Java\jdk1.7.0_45\bin。

源程序如果有语法错误,编译时则会给出相应的错误提示信息和错误大致位置,这个位置基本准确,但有时可能是其他地方的错误而引发的,所以在排除错误时要前后仔细查看。有错误或警告的话,用文本编辑器重新编辑修改,存盘退出后,再次编译,直至没有任何错误。当然,要提醒读者的是,编译器只能查找程序中的语法错误,对于程序逻辑上的问题,编译器是不会给出提示的。

图1-4 “环境变量”对话框图1-5 “编辑系统变量”对话框

编译成功后,Java程序的编译器对应源代码文件中定义的每个类都生成一个以这个类名字命名的.class文件。

3.字节码的解释与运行

在JDK软件包中,用来解释Java 字节码应用程序的解释程序是。

命令格式:java 字节码文件名

【注意】命令中字节码文件名后面不要写后缀名.class,因为默认就是要去执行.class 文件,写了反而要出错。

例如:java Hello

1-1的编译、解释、执行情况如图1-6所示。

同一Java源文件中可定义多个类,以下程序中定义了两个类,编译后将产生两个字节码文件。

【例1-2】同一源程序文件中定义了多个类()。

程序代码如下:

#01 public class First {

#02 public static void main(String args[ ]) {

#03 .println(ge);

#04 }

#05 }

#06

#07 class Second {

#08 static String Message = "Hello Java!";

#09 }

【说明】第1~5行定义了First类,第7~9行定义了Second类。Second类中定义了一个静态属性Message,在First类中访问Second类的Message属性。

【注意】同一Java源文件中最多只能定义一个带public修饰的类,且要求源程序的文件名必须与public修饰的类名一致,main()方法通常也放在该类中。运行程序时,要执行含main()方法的类,本例是First类。如果将First类的main()方法复制到Second类中,也可以运行Second类。

1.3.2 Java Applet程序的调试

Java Applet是另一类Java程序,它的源代码编辑和字节码编译生成过程与Java应用程序相同,但其运行是将Applet字节码作为一个对象嵌入HTML页面中由浏览器解释执行。Applet程序的一些方法会根据浏览器窗体的动作行为自动执行。例如,例1-3中的paint()方法将在浏览器首次加载Applet以及缩放窗体时自动调用。

【例1-3】简单Applet程序()。

程序代码如下:

#01 import t.Applet;

#02 import .*;

#03 public class Example extends Applet {

#04 public void paint(Graphics g) {

#05 g.setColor();

#06 g.drawString("大家好!", 40, 80);

#07 g.drawLine(30, 40, 130, 40);

#08 g.drawOval(30, 40, 80, 60);

#09 }

#10 }

【说明】

(1)第1、2行的两个import语句用来引入Java 系统提供的类,t.Applet表示t包中的Applet类;.*表示包中的所有类,本程序中用到其中的Graphics类和Color类。Java语言中通过包组织类,引入其他包中的类,就可以在程序中直接使用这些类。

(2)第3行定义了本例的主类,Example是类名,要注意主类名必须和文件名相同,extends是关键字,表示继承的意思,通过继承Applet类可得到Java系统的Applet类提供的特性和行为。

(3)第4行定义的方法为Applet中实现图形绘制的方法,Applet程序将自动调用该

方法进行绘图。paint()

方法的参数g是一个代表“画笔”的Graphics对象,利用该对象可调用Graphics类的方法绘制各种图形,如第5行用setColor()方法设置画笔的颜色,表示红色;第6行用drawString()方法在指定位置绘制字符串,后面两个参数为坐标位置;第7行用drawLine()方法绘制直线,参数为直线的始点和末点的坐标。第8行用drawOval()方法绘制椭圆,4个参数为椭圆的外切矩形左上角的坐标、宽度和高度。

运行Java Applet时必须通过标记将其字节码嵌入到HTML文件中。HTML 文件的名称与Java程序无关,不妨将以下内容保存在x.html文件中。

其中,标签指定浏览器装载Example .class字节码文件,WIDTH和HEIGHT 属性指定applet显示区域的宽和高的大小,单位是像素。

查看程序的运行结果可以有两种办法。方法一是用IE浏览器打开x.html程序,结果如图1-7所示。方法二用JDK中提供的应用程序来查看,运行结果如图1-8所示。以下为使用appletviewer应用程序查看时的命令形式。

D:> appletviewer x.html

图1-7 在浏览器中查看Applet 图1-8 用appletviewer查看Applet

1.4 在Eclipse环境下调试Java程序

从Eclipse的网站()下载Eclipse安装程序包(本书用的版本是eclipse-standard-kepler-SR1-win32-x86_32.exe)。运行该程序,按提示可完成Eclipse的解包安装,在安装后的目录中将有一个eclipse子目录,运行其下的应用程序即可启动Eclipse。

(1)从File菜单中选择New→Java Project命令创建一个工程,将弹出如图1-9所示的对话框,输入工程名称(例如,test),单击Finish按钮。此时可看到如图1-10所示的新建工程内容组织视图。

图1-9 新建Java 工程对话框 图1-10 新建工程test 的内容组织视图 (2)选中工程,单击鼠标右键,在弹出的快捷菜单中选择New →Class 命令,在弹出对话框的Name 文本框中输入类名Hello ,如图1-11所示。然后单击Finish 按钮,即可进

入程序编辑界面。

图1-11 在工程中新建一个Java 类

(3)在如图1-12所示的程序编辑界面中可编辑输入程序。要调试运行程序,可按Ctrl+F11快捷键或者单击图标。如果程序编译有问题,则将在右下的Console 子窗体中显示编译错误提示信息;如果程序通过编译,则在右下的Console 子窗体中可看到运行结果。

图1-12 程序编辑和运行调试界面

1.5 Java语言的特点

1.5.1 简单的面向对象语言

Java的语法类似C或C++,Java是从C++基础上发展而来的。从某种意义上讲,Java 语言是C及C++语言的一个变种,因此,C++程序员可以很快就能掌握Java编程技术。但Java比C++要简单,Java摒弃了C++中容易引发程序错误的地方,如指针和内存管理。另一方面,它又从Smalltalk和Ada等语言中吸收了面向对象技术中最好的东西。Java语言的设计完全是面向对象的,而且提供了丰富的类库。

1.5.2 跨平台与解释执行

Java实现了软件设计人员的一个梦想——“跨平台”,为此目标,Java的目标代码设计为字节码的形式,从而可以做到“一次编译、到处执行”。在具体的机器运行环境中,由Java虚拟机对字节码进行解释执行。通过定义独立于平台的基本数据类型及运算,Java 数据得以在任何硬件平台上保持一致。

解释执行无疑在效率上要比直接执行机器码低,所以Java的运行速度相比C++要慢些。但Java解释器执行的字节码是经过精心设计的,Java解释器执行的速度比其他解释器快。结合其他一些技术,也可以提高Java的执行效率,例如,在具体平台下Java还可以使用本地代码。Java运行环境将提供一个即时编译器,这个编译器在运行时将字节码翻译为机器码。

1.5.3 健壮和安全的语言

Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。Java

在编译时,提示可能出现但未被处理的异常,帮助程序员正确地进行选择,以防止系统崩溃。类型检查帮助检查出许多早期开发出现的错误。Java不支持指针,从而防止了对内存的非法访问。在Java语言里,像指针和释放内存等C++功能被删除,避免了非法内存操作。

由于Java代码的可移动特性,代码的安全设计变得至关重要。例如,Java Applet存放在Web服务器上,但却下载到客户端浏览器中运行。如果Applet中含有恶意代码(例如修改或删除客户端的文件),那是非常危险的。因此,Java代码在执行前将由运行系统进行安全检查,只有通过了安全检查的代码才能正常执行。

1.5.4 支持多线程

多线程是当今软件技术的一项重要成果,它在很大程度上提高了软件的运行效率,因此,在操作系统、数据库系统以及应用软件开发等很多领域得到广泛使用。多线程技术允许在同一程序中有多个执行线索,也就是可以同时做多件事情,从而满足复杂应用的需要。Java不但内置多线程功能(例如Java的自动垃圾回收就是以线程方式在后台运作),而且Java提供语言级的多线程支持,利用Java的Thread类可容易地编写多线程应用。

1.5.5 面向网络的语言

Java源于分布式应用这一背景。Java Applet是直接嵌入到浏览器中执行的程序,这给浏览器页面的动态交互性带来了重大影响。Java中还提供了丰富的网络功能,如利用Java 提供的Socket和数据报的通信功能,可以很容易地编写客户/服务器应用。Java应用程序可凭借URL打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。如今,Java已经成为了分布式企业级应用的标准。

1.5.6 动态性

Java程序的基本组成单元是类,有些类是自己编写的,有些是从类库引入的。在运行时所有的Java类是动态装载的,这就使Java可以在分布式环境下动态地维护程序和类库。不像C++那样,每当类库升级后,相应的程序都必须重新修改、编译。

习题

1.选择题

(1)编译和解释执行一个Java应用程序应分别采用的命令是()。

A.java和javac B.javac和java C.javap和java D.javac和jdb (2)下列叙述中正确的是()。

A.Java语言的标识符是区分大小写的

B.源文件名与public类名可以不相同

C.源文件扩展名为.java

D.源文件中public类的数目不限

(3)编译Java源程序文件将产生相应的字节码文件,字节码文件的扩展名为()。

A.java B.class C.html D.exe (4)下列说法正确的是()。

A.当运行javac命令对一个Java源程序(.java文件)进行编译时,必须写出该源文件的完整文件名,包括扩展名.java

B.当运行javac命令对一个java源程序(.java文件)进行编译时,不必写出该源文件的扩展名.java

C.当用Java命令解析运行一个class文件时,必须写出该class文件的扩展名.class

D.无论是运行javac还是java命令,后面的文件都必须给出文件扩展名(5)Java程序的执行过程中用到一套JDK工具,其中是指()。

A.Java文档生成器B.Java解释器

C.Java编译器D.Java类分解器

(6)在Java中负责对字节码解释执行的是()。

A.垃圾回收器B.虚拟机C.编译器D.多线程机制(7)以下()是应用程序的main方法头。

A.public static int main(char args[ ])

B.public static void main(String args[ ])

C.public static void MAIN(String args[ ])

D.public static void main(String args)

2.问答题

(1)简述面向对象程序设计的特性。

(2)简述Java语言的特点。

3.编程题

(1)创建一个名为TestApp的Java 应用程序,在屏幕上分行显示如下一段文字:华东交通大学

欢迎您!

(2)创建一个名为TestApplet的Applet程序,显示两个同心圆,圆内显示两个汉字“同心”,并编写相应的文件。

(3)分别编写Java应用程序和Applet程序,实现如下三角形图案的绘制。

*

***

*****

【提示】命令行方式下,输出内容用换行定位;图形方式下,绘制字符串用坐标定位。

相关主题