java语言基础教程_第1页
java语言基础教程_第2页
java语言基础教程_第3页
java语言基础教程_第4页
java语言基础教程_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章Java概述

§1.IJava语言出现的背景、影响及应用前景

一、背景

最近一年多来,在Internet上出现的特别吸引人的事件就是Java语

言和用Java编写的浏览器HotJava。

1991年,SUNMicroSystem公司的JameGosling、BillJoe等人,为在

电视、控制烤面包箱等家用消费类电子产品上进行交互式操作而开

发了一个名为Oak的软件(即一种橡树的名字),但当时并没有引起人

们的注意,直到1994年下半年,Internet的迅猛发展,环球信息网

WWW的快速增长,促进了Java语言研制的进展以介绍面向对象编程

的基本概念、基本理论为重点,结合Java语言的语法规则、编程特

点和设计思想、强调容易发生错误和编程应注意的地方,使学生能对

Java技术有一个总体了解,通过本课程学习,使学生掌握Java语言

的基础知识,理解和掌握面向对象程序设计的基本思想,熟练地使用

Java语言进行程序的编写、编译以及调试工作,使得它逐渐成为

Internet上受欢迎的开发与编程语言,一些著名的计算机公司纷纷

购买了Java语言的使用权,如Microsoft、IBM、Netscape>Novell、

Apple、DEC、SGI等,因此,Java语言被美国的著名杂志PCMagazine

评为1995年十大优秀科技产品,(计算机类就此一项入选),随之大量

出现了用Java编写的软件产品,受到工业界的重视与好评,认为

“Java是八十年代以来计算机界的一件大事〃,微软总裁比尔•盖茨

在悄悄地观察了一段时间后,不无感慨地说:“Java是长时间以来最

卓越的程序设计语言”,并确定微软整个软件开发的战略从PC单机时

代向着以网络为中心的计算时代转移,而购买Java则是他的重大战

略决策的实施部署。

因此,Java的诞生必将对整个计算机产业发生深远的影响,对传统的

计算模型提出了新的挑战。

SUNMicroSystem公司的总裁ScottMcNealy认为Java为Internet和

WWW开辟了一个崭新的时代。

环球信息网WWW的创始人Berners-Lee说:"计算机事业发展的下一个

浪潮就是Java,并且将很快会发生的〃。

看来,使用Java已成大势所趋!

Microsoft和IBM两大公司都计划在Internet上销售用Java编写的

软件。Apple、HP、IBM>MicroSoft>Novell、SGI、SCO、Tandem

等公司均计划将Java并入各自开发的操作系统,而负责开发并推广

Java技术的SunSoft公司(这是SUN下属的一个子公司),将通过颁

发许可证的办法来允许各家公司把Java虚拟机和Java的Applets

类库嵌入他们开发的操作系统,这样各类开发人员就能更容易地选

择多种平台来使用Java语言编程,不同的用户也就可以脱离Web浏

览器来运行Java应用程序,这无疑是很受广大用户欢迎的,也为Java

语言的应用开拓了极为广阔的前景。(当然,各类JavaOS之间的兼容

性必须得到重视,好在JavaSoft已保证将监督这种兼容性)。

另外,由JavaSoft推出的完全用Java编写的Internet上新型浏览器

Hotjava,比去年alpha版更为实用,不仅能编制动态的应用软件,而

且能编制完整的成套桌面应用软件,将来还会提供更多的能帮助编

制动态应用软件的模块,显然,这也是为Java的应用提供了有力的

例证。

今年6月7日,由SUN公司和台湾经济事务部信息发展局、台湾信息

技术研究所等单位牵头,成立了一个“Java联盟〃,参加的有22个在

台湾相当著名的计算机公司,并在台北建立一个〃Java开发中心〃,在

新竹建立一个"Java语言实验室〃,以掀起台湾开发与应用Java语言

的热潮。

香港则在今年4月就举行了全岛的Java杯比赛,在计算机界掀起了学

习Java的热潮(尤其是在大学生们中,出现了一批Java迷)。

有人预言:Java将是网络上的〃世界语〃,今后所有的用其他语言编写

的软件统统都要用Java语言来改写。

二、Java语言对软件开发技术的影响

工业界不少人预言:〃java语言的出现,将会引起一场软件革命”,这是

因为传统的软件往往都是与具体的实现环境有关,换了一个环境就

需要作一番改动,耗时费力,而Java语言能在执行码(二进制码)上

兼容,这样以前所开发的软件就能运行在不同的机器上,只要所用的

机器能提供Java语言解释器即可。

Java语言将对未来软件的开发产生影响,可从如下儿个方面考虑:

1软件的需求分析:可将用户的需求进行动态的、可视化描述,以提供

设计者更加直观的要求。而用户的需求是各色各样的,不受地区、行

业、部门、爱好的影响,都可以用Java语言描述清楚。

2软件的开发方法:由于Java语言的面向目标的特性,所以完全可以

用0-0的技术与方法来开发,这是符合最新的软件开发规范要求的。

3Java语言的动画效果远比GUI技术更加逼真,尤其是利用WWW提供

的巨大动画资源空间,可以共享全世界的动态画面的资源。

4软件最终产品:用Java语言开发的软件可以具有可视化、可听化、

可操作化的效交互、动画与动作要它停就停,要它继续就继续,而

这是在电影与电视播放过程中难以做到的。

5其它:使用Java语言对开发效益、开发价值都有比较明显的影响。

三、工业界对Java语言的评价

1996年5月29〜31日,在美国旧金山召开了一个全世界Java语言开

发者大会,(JavaOneDeveloperConfer-ence),出席会议的多达6500

多人,来自工业界的超过一半,有人评价说:〃这是近年来计算机界最

光辉的一次盛会”,一些工业界的老总们相当看好Java语言,认为它

的使用将会引起一场软件革命。从软件的设计风格、设计方法、设

计目标到设计过程,都会产生彻底的变革,”甚至会改变此星球的生

活方式

在这次会上,Java的创始人之一JamesGosling说:“Java不仅仅只是

applets,它能做任何事情〃,Dta咨询公司的高级软件工程师

RichKadel说:"Java不仅仅是一种程序设计语言,更是现代化软件再

实现的基础;Java还是未来新型0S的核心;将会出现Java芯片;将构

成各种应用软件的开发平台与实现环境,是人们必不可少的开发工

具,……

由于各界都看好它,因此,各大公司都纷纷表示支持Java,Intel、

Xerox公司声言将把Java嵌入到他们的产品中去。就连华尔街金融

界也在投入资金人力用Java开发电子贸易、金融软件。

所以有人说:“现在第三方的开发商都团结在Java大旗周围了!〃,纷

纷推出用Java开发的各种软件产品,以期尽快地占领市场。

四、Java语言的应用前景

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

应用:

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

等;

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

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

4交互操作的设计(选择交互、定向交互、控制流程等);

5Internet的系统管理功能模块的设计,包括Web页面的动态设计、

管理和交互操作设计等;

6Intranet(企业内部网)上的软件开发(直接面向企业内部用户的软

件);

7与各类数据库连接查询的SQL语句实现;

8其它应用类型的程序。

§1.2Java的特点

Java是一个广泛使用的网络编程语言,它是一种新的计算概念。

首先,作为一种程序设计语言,它简单、面向对象、不依赖于机器的结

构、具有可移植性、鲁棒性、安全性、并且提供了并发的机制、具

有很高的性能。其次,它最大限度地利用了网络,Java的小应用程序

(applet)可在网络上传输而不受CPU和环境的限制。另外,Java还

提供了丰富的类库,使程序设计者可以很方便地建立自己的系统。

下面我们分别从这三个方面来讨论Java的特点,然后通过把Java与

C,C++相比进一步指出它所具有的优点。

一、Java语言

Java语言有下面一些特点:简单、面向对象、分布式、解释执行、鲁

棒、安全、体系结构中立、可移植、高性能、多线程以及动态性。

1.简单性

Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指

定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种

情况的应用程序。Java略去了运算符重载、多重继承等模糊的概念,

并且通过实现自动垃圾收集大大简化了程序设计者的内存管理工

作。另外,Java也适合于在小型机上运行,它的基本解释器及类的支

持只有40KB左右,加上标准类库和线程的支持也只有215KB左右。

库和线程的支持也只有215KB左右。

2.面向对象

Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动

态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了

模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机

制,子类可以使用父类所提供的方法,实现了代码的复用。

3.分布性

Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,

用户可以通过URL地址在网络上很方便地访问其它对象。

4.鲁棒性

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

错误的产生。它提供自动垃圾收集来进行内存管理,防止程序员在管

理内存时容易产生的错误。通过集成的面向对象的例外处理机制,

在编译时,Java提示出可能出现但未被处理的例外,帮助程序员正确

地进行选择以防止系统的崩溃。另外,Java在编译时还可捕获类型

声明中的许多常见错误,防止动态运行时不匹配问题的出现。

5.安全性

用于网络、分布环境下的Java必须要防止病毒的入侵。Java不支持

指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就

防止程序员使用〃特洛伊〃木马等欺骗手段访问对象的私有成员,同

时也避免了指针操作中容易产生的错误。

6.体系结构中立

Java解释器生成与体系结构无关的字节码指令,只要安装了Java运

行时系统,Java程序就可在任意的处理器上运行。这些字节码指令

对应于Java虚拟机中的表示,Java解释器得到字节码后,对它进行

转换,使之能够在不同的平台运行。

7,可移植性

与平台无关的特性使Java程序可以方便地被移植到网络上的不同机

器。同时一,Java的类库中也实现了与不同平台的接口,使这些类库可

以移植。另外,Java编译器是由Java语言实现的,Java运行时系统

由标准C实现,这使得Java系统本身也具有可移植性。

8.解释执行

Java解释器直接对Java字节码进行解释执行。字节码本身携带了许

多编译时信息,使得连接过程更加简单。

9.高性能

和其它解释执行的语言如BASIC.TCL不同,Java字节码的设计使之

能很容易地直接转换成对应于特定CPU的机器码,从而得到较高的

性能。

10.多线程

多线程机制使应用程序能够并行执行,而且同步机制保证了对共享数

据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程

完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易

地实现网络上的实时交互行为。

11.动态性

Java的设计使它适合于一个不断发展的环境。在类库中可以自由地

加入新的方法和实例变量而不会影响用户程序的执行。并且Java通

过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和

扩展性。

二、JavaApplet

Java语言的特性使它可以最大限度地利用网络。Ap-plet是Java的

小应用程序,它是动态、安全、跨平台的网络应用程序。JavaApplet

嵌入HT肛语言,通过主页发布到Internet。网络用户访问服务器的

Applet时一,这些Applet从网络上进行传输,然后在支持Java的浏览

器中运行。由于Java语言的安全机缶”,用户一旦载入Applet,就可

以放心地来生成多媒体的用户界面或完成复杂的计算而不必担心病

毒的入侵。虽然Applet可以和图像、声音、动画等一样从网络上下

载,但它并不同于这些多媒体的文件格式,它可以接收用户的输入,动

态地进行改变,而不仅仅是动画的显示和声音的播放。

三、丰富的类库

Java提供了大量的类以满足网络化、多线程、面向对象系统的需要。

1.语言包提供的支持包括字符串处理、多线程处理、例外处理、数学

函数处理等,可以用它简单地实现Java程序的运行平台。

2.实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期

等。

3.输入输出包用统一的“流〃模型来实现所有格式的I/O,包括文件系

统、网络、输入

4.低级网络包用于实现Socket编程。

5.抽象图形用户接口包实现了不同平台的计算机的图形用户接口部

件,包括窗口、菜单、滚动条、对话框等,使得Java可以移植到不同

平台的机器。

6.网络包支持Internet的TCP/IP协议,提供了与In-ternet的接口。

它支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程

序设计。

四、Java和C、C++

对于变量声明、参数传递、操作符、流控制等,Java使用了和C、C++

相同的传统,使得熟悉C、C++的程序员能很方便地进行编程。同

时,Java为了实现其简单、鲁棒、安全等特性,也摒弃了C和C++中

许多不合理的内容。

1.全局变量

Java程序中,不能在所有类之外定义全局变量,只能通过在一个类中

定义公用、静态的变量来实现一个全局变量。例如:

ClassGlobalVar{publicstaticglobal_var;}

在类GlobalVar中定义变量global_var为publicstatic,使得其它

类可以访问和修改该变量。Java对全局变量进行了更好的封装。

而在C和C++中,依赖于不加封装的全局变量常常造成系统的崩溃。

2.Goto

Java不支持C、C++中的goto语句,而是通过例外处理语句try,Catch,

final等来代替C、C++中用goto来处理遇到错误时跳转的情况,使程

序更可读且更结构化。

3.指针

指针是C、C++中最灵活,也是最容易产生错误的数据类型。由指针所

进行的内存地址操作常会造成不可预知的错误,同时通过指针对某

个内存地址进行显式类型转换后,可以访问一个C++中的私有成员,

从而破坏安全性,造成系统的崩溃。而Java对指针进行完全的控制,

程序员不能直接进行任何指针操作,例如把整数转化为指针,或者通

过指针释放某一内存地址等。同时,数组作为类在Java中实现,良好

地解决了数组访问越界这一C、C++中不作检查的错误。

4.内存管理

在C中,程序员通过库函数malloc()和free()来分配和释放内存,C++

中则通过运算符new和delete来分配和释放内存。再次释放已释放

的内存块或未被分配的内存块,会造成系统的崩溃;同样,忘记释放

不再使用的内存块也会逐渐耗尽系统资源。而在Java中,所有的数

据结构都是对象,通过运算符new为它们分配内存堆。通过new得到

对象的处理权,而实际分配给对象的内存可能随程序运行而改

变,Java对此自动地进行管理并且进行垃圾收集,有效防止了由于程

序员的误操作而导致的错误,并且更好地利用了系统资源。

5.数据类型的支持

在C、C++中,对于不同的平台,编译器对于简单数据类型如int,float

等分别分配不同长度的字节数,例如:int在IBMPC中为16位,在

VAX-11中为32位,这导致了代码的不可移植性,但在Java中,对于这

些数据类型总是分配固定长度的位数,如对int型,它总占32位,这

就保证了Java的平台无关性。

6.类型转换

在C、C++中,可以通过指针进行任意的类型转换,常常带来不安全性,

而Java中,运行时系统对对象的处理要进行类型相容性检查,以防止

不安全的转换。

7.头文件

C、C++中用头文件来声明类的原型以及全局变量、库函数等,在大的

系统中,维护这些头文件是很困难的。而Java不支持头文件,类成员

的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,

防止对私有成员的操作。同时,Java中用import语句来与其它类进

行通讯,以便使用它们的方法。

8.结构和联合

C、C++中的结构和联合中所有成员均为公有,这就带来了安全性问题。

Java中不包含结构和联合,所有的内容都封装在类中。

9.预处理

C、C++中用宏定义来实现的代码给程序的可读性带来了困难。在Java

中,不支持宏,它通过关键字final来声明一个常量,以实现宏定义中

广泛使用的常量定义。

目录

Java入门(一)

Java入门(二)

JavaAH(三)

JavaAH(四)

Java入门(五)

JavaAH(六)

JavaAH(七)

Java入门(八)

Java入门(九)

第一章Java概述(续)

§1.3.简单的Java程序

下面我们先介绍两个简单的Java程序,并对其进行分析。

例1.1.

publicclassHelloWor1dApp{//anapplication

publicstaticvoidmain(Stringargs[]){

System.out.printin("HelloWorld!");

)

)

本程序的作用是输出下面一行信息:

HelloWorld!

程序中,首先用保留字class来声明一个新的类,其类名为

HelloWorldApp,它是一个公共类(public)。整个类定义由大括号(}

括起来。在该类中定义了一个main。方法,其中public表示访问权

限,指明所有的类都可以使用这一方法;static指明该方法是一个类

方法,它可以通过类名直接调用;void则指明main。方法不返回任

何值。对于一个应用程序来说,main。方法是必需的,而且必须按照

如上的格式来定义。Jave解释器在没有生成任何实例的情况下,以

main。作为入口来执行程序。Jave程序中可以定义多个类,每个类

中可以定义多个方法,但是最多只能7有一个公共类,main()方法也

只能有一个,作为程序的入口。main。方法定义中,括号()中的

Stringargs□是传递给main()方法的参数,参数名为args,它是类

String的一个实例,参数可以为0个或多个,每个参数用〃类名参数

名〃来指定,多个参数间用逗号分隔。在main。方法的实现(大括号

中),只有一条语句:

System,out.printin("HelloWorld!");

它用来实现字符串的输此这条语句实现与C语言中的printf语句

和C++中coutVV语句相同的功能。另外,〃后的内容为注释。

现在我们可以运行该程序。首先把它放到一个名为

HelloWorldApp.java的文件中,这里,文件名应和类名相同,因为

Java解释器要求公共类必须放在与其同名的文件中。然后对它进行

编译:

C:\>javacHelloWorldApp.java

编译的结果是生成字节码文件HelloWorldApp.classo最后用java

解释器来运行该字节码文件:

C:\>javaHelloWorldApp

结果在屏幕上显示HelloWorld!

我们再来看下面的一个例子:

例1.2

importjava.awr.*;

importjava,applet.

publicclassHelloWorldAppletextendsApplet{//anapplet

publicvoidpaint(Graphicsg){

g.drawString(/zHelloWorld!^,20,20);

)

)

这是一个简单的Applet(小应用程序)。程序中,首先用import语句

输入java,awr和java.applet下所有的包,使得该程序可能使用这

些包中所定义的类,它类似于C中的include语句。然后声明一个

公共类HelloWorldApplet,用extends指明它是Applet的子类。在

类中,我们重写父类Ap-plet的paint()方法,其中参数g为Graphics

类,它表明当前作画的上下文。在paint。方法中,调用g的方法

drawString(),在坐标(20,20)处输出字符串“HelloWorld!〃,其中坐

标是用象素点来表示的。

这个程序中没有实现main。方法,这是Applet与应用程序

Application(如例1)的区别之一。为了运行该程序,首先我们也要

把它放在文件HelloWorldApplet.java中,然后对它进行编译:C:\

>javacHelloWor1dApplet.java

得到字节码文件HelloWorldApplet.classo由于Applet中没有

main。方法作为Java解释器的入口,我们必须编写HTML文件,把该

Applet嵌入其中,然后用appletviewer来运行,或在支持Java的浏

览器上运行。它的VHTML>文件如下:

<HTML>

<HEAD>

<TITLE>AnApplet</TITLE>

</HEAD>

<B0DY>

<appletcode=,/HelloWorldApplet.class,/width=200height=40>

</applet>

</BODY>

</HTML>

其中用〈applet〉标记来启动HelloWorldApplet,code指明字节码

所在的文件,width和height指明applet所占的大小,我们把这个

HTML文件存入Example,html,然后运行:

C:\>appleviewerExample,html

这时屏幕上弹出一个窗口,其中显示HelloWorld!,显示结果如图:

从上述例子中可以看出,Java程序是由类构成的,对于一个应用程序

来说,必须有一个类中定义main。方法,而对applet来说,它必须作

为Applet的一个子类。在类的定义中,应包含类变量的声明和类中

方法的实现。Java在基本数据类型、运算符、表达式、控制语句等

方面与C、C++基本上是相同的,但它同时也增加了一些新的内容,在

以后的各章中,我们会详细介绍。本节中,只是使大家对Java程序有

一个初步的了解。

第二章数据类型

§2.1数据类型

数据类型指明了变量或表达式的状态和行为。Java的数据类型如下

所示:

Java不支持C、C++中的指针类型、结构体类型和共用体类型。

本章我们主要介绍简单类型。

§2.2常量与变量

一、常量

Java中的常量值是用文字串表示的,它区分为不同的类型,如整型常

量123,实型常量1.23,字符常量'a',布尔常量true、false以及

字符串常量"Thisisaconstantstring."。与C>C++不同,Java

中不能通过#define命令把一个标识符定义为常量,而是用关键字

final来实现,如finaldoublePI=3.14159(有关final的用法见

[6.2,3])o

二、变量

变量是Java程序中的基本存储单元,它的定义包括变量名、变量类

型和作用域儿个部分。

①变量名是一个合法的标识符,它是字母、数字、下划线或美元符〃

$〃的序列,Java对变量名区分大小写,变量名不能以数字开头,而且

不能为保留字。合法的变量名如:myName、value-1>dollar$等。

非法的变量名如:2mail、room#、class(保留字)等,变量名应具有一

定的含义,以增加程序的可读性。

②变量类型可以为上面所说的任意一种数据类型。

③变量的作用域指明可访问该变量的一段代码。声明一个变量的同

时也就指明了变量的作用域。按作用域来分,变量可以有下面儿种:

局部变量、类变量、方法参数、例外处理参数。局部变量在方法或

方法的一块代码中声明,它的作用域为它所在的代码块(整个方法或

方法中的某块代码)。

类变量在类中声明,而不是在类的某个方法中声明,它的作用域是整

个类。

方法参数传递给方法,它的作用域就是这个方法。

例外处理参数传递给例外处理代码,它的作用域就是例外处理部分。

在一个确定的域中,变量名应该是唯一的。通常,一个域用大括号{}

来划定。

有关类变量、参数传递以及例外处理将分别在[6.7.1]、[6.2.4]和

第八章中讲述。

④变量的声明格式为:

typeidentifier[=value][,identifier[=value]•,•];

例如:inta,b,c;

doubledl,d2=0.0;

其中,多个变量间用逗号隔开,d2=0.0对实型变量d2赋初值0.0,只

有局部变量和类变量是可以这样赋初值的,而方法参数和例外处理

参数的变量值是由调用者给出的。

§2.3整型数据

一、整型常量:

与C,C++相同,Java的整常数有三种形式:

①十进制整数,如123,-456,0

②八进制整数,以0开头,如0123表示十进制数83,-011表示十进制

数-9。

③十六进制整数,以Ox或0X开头,如0x123表示十进制数291,-0X12

表示十进制数-18。

整型常量在机器中占32位,具有int型的值,对于long型值,则要在

数字后加L或1,如123L表示一个长整数,它在机器中占64位。

二、整型变量:

整型变量的类型有byte、short、int、long四种。下表列出各类型

所在内存的位数和其表示范围。

目录

JavaAH(一)

Java入门(二)

Java入门(三)

Java入门(四)

JavaAH(五)

Java入门(六)

JavaAH(七)

JavaAH(八)

JavaAH(九)

回应删除举报广告2008-06-0318:26:43克洛泽大地(DREG)

第二章数据类型(续)

int类型是最常使用的一种整数类型。它所表示的数据范围64位处

理器。但对于大型计算,常会遇到很大的整数,超出int类所表示的

范围,这时要使用long类型。

由于不同的机器对于多字节数据的存储方式不同,可能是低字节向

高字节存储,也可能是从高字节向低字节存储,这样,在分析网络协

议或文件格时,为了解决不同机器上的字节存储顺序问题,用byte

类型来表示数据是合适的。而通常情况下,由于其表示的数据范围

很小,容易造成溢出,应避免使用。

short类型则很少使用,它限制数据的存储为先高字节,后低字节,这

样在某些机器中会出错。

三、整型变量的定义,如:

byteb;〃指定变量b为byte型

shorts;〃指定变量s为short型

inti;〃指定变量i为int型

long1;〃指定变量1为long型

§2.4浮点型(实型)数据

一、实型常量

与C,C++相同,Java的实常数有两种表示形式:

①十进制数形式,由数字和小数点组成,且必须有小数点,如

0.123,.123,123.,123.0

②科学计数法形式。如:123e3或123E3,其中e或E之前必须有数,

且e或E后面的指数必须为整数。实常数在机器中占64位,具有

double型的值。对于float型的值,要在数字后加f或F,如12.3F,

它在机器中占32位,且表示精度较低。

二、实型变量

实型变量的类型有float和double两种,下表列出这两种类型所占

内存的位数和其表示范围。

数据类型所占位数数的范围

float323.4e-038〜3.4e+038

double641.7e-308〜1.7e+308

双精度类型double比单精度类型float具有更高的精度和更大表示

范围,常常使用。

三、实型变量定义,如

floatf;〃指定变量f为float型

doubled;〃指定变量d为double型

[注]与C、C++不同,Java中没有无符号型整数,而且明确规定了整型

和浮点型数据所占的内存字节数,这样就保证了安全性、鲁棒性和平

台无关性。

§2.5字符型数据

一、字符常量

字符常量是用单引号括起来的一个字符,如'a',?夕卜,与C、

C++相同,Java也提供转义字符,以反斜杠(\)开头,将其后的字符转

变为另外的含义,下?列出了Java中的转义字符。

与C、C++不同,Java中的字符型数据是16位无符号型数据,它表示

Unicode集,而不仅仅是ASCII集,例如\u0061表示ISO拉丁码的'a'。

转义字符描述

\dddl到3位8进制数据所表示的字符(ddd)

\uxxxxl到4位16进制数所表示的字符(xxxx)

''单引号字符

\\反斜杠字符

\r回车

\n换行

\f走纸换页

\t横向跳格

\b退格

二、字符型变量

字符型变量的类型为char,它在机器中占16位,其范围为0-65535。

字符型变量的定义如:

charc='a';〃指定变量c为char型,且赋初值为‘a

与C、C++不同,Java中的字符型数据不能用作整数,因为Java不供

无符号整数类型。但是同样可以把它当作整数数据来操作。

例如:

intthree=3;

charone=,1';

charfour=(char)(three+one);//four=,4'

上例中,在计算加法时,字符型变量one被转化为整数,进行相加,最

后把结果又转化为字符型。

三、字符串常量

与C、C++相同,Java的字符串常量是用双引号(")括起来的一串字

符,如"Thisisastring.\n"。但不同的是,Java中的字符串常量是作

为String类的一个对象来处理,而不是一个数据。有关类String,

我们将在第七章讲述。

§2.6布尔型数据

布尔型数据只有两个值,true和false,且它们不对应于任何整值。

在流控制中常用到它

O布尔型变量的定义如:

booleanb=true;//定义b为布尔型变量,且初值为true

§2.7举例

例2.1.下例中用到了前面提到的数据类型,并通过屏幕显示们的值。

publicclassSimpleTypes(

publicstaticvoidmain(Stringargs[]){

byteb=0x55;

shorts=0x55ff;

inti=1000000;

longl=0xfffL;

charc=,c;

floatf=0.23F;

doubled=0.7E-3;

booleanbool=true;

System.out.printin("b="+b);

System.out.println("s="+s);

System.out.println("i="+i);

System.out.printin("1="+1);

System.out.printin("c="+c);

System.out.println("f="+f);

System.out.println("d="+d);

System.out.printIn(,zbool=,,+bool);

)

编译并运行该程序,输出结果为:

C:\>javaSimpleTypes

b=85

s=22015

i=1000000

1=4095

c=c

f=0.23

d=0.0007

bool=true

§2.8各类数值型数据间的混合运算

一、自动类型转换

整型、实型、字符型数据可以混合运算。运算中,不同类?的数据先

转化为同一类型

,然后进行运算。转换从低级到高级,如下图:

转换规则为:

①(byte或short)opint^int

②(byte或short或int)oplongflong

③(byte或short或int或long)opfloat^-float

④(byte或short或int或long或float)opdouble^double

⑤charopintfint

其中,箭头左边表示参与运算的数据类型,。P为运算符(如力口减、乘、

除等),右边表示转换成的进行运算的数据类型。

例2.2

publicclassPromotion(

publicstaticvoidmain(Stringargs[]){

byteb=10;

charc=,a';

inti=90;

long1=555L;

floatf=3.5f;

doubled=l.234;

floatfl=f*b;//float*byte->float

intil=c+i;//char+int->int

longll=l+il;//long+int->ling

doubledl=fl/il-d;//float/int->float,float-double->

double}

)

二、强制类型转换

高级数据要转换成低级数据,需用到强制类型转换,如:

inti;

byteb=(byte)i;//把int型变量i强制转换为byte型

这种使用可能会导致溢出或精度的下降,最好不要使用。

目录

Java入门(一)

Java入门(二)

Java入门(三)

JavaAH(四)

Java入门(五)

JavaAH(六)

Java入门(七)

JavaAH(八)

JavaAH(九)

回应删除举报广告2008-06-0318:26:55克洛泽大地(DREG)

第三章运算符和表达式

运算符指明对操作数所进行的运算。按操作数的数目来分+-),二元

运算符(如+、>)和三元运算符(如?:),它们分别对应于一于一元运

算符来说,可以有前缀表达式(如++i)和后缀表达式(如采用中缀表

达式(如a+b)。按照运算符功能来分,基本的运算符?下面几类:

算术运算符*,/,%,++,一)

关系运算符(>,V,>=,<=,==,!=)

布尔逻辑运算符(!,&&,II)

位运算符(>>,<<,>>>,&,|/,~)

赋值运算符(=,及其扩展赋值运算符如+=)

条件运算符(?:)

其它(包括分量运算符-,下标运算符口,实例运算符instanceof,内

存分配运算符new,强制类型转换运算符(类型),方法调用运算符()

等)

本章中我们主要讲述前6类运算符。

§3.1算术运算符

算术运算符作用于整型或浮点型数据,完成算术运算。

一、二元算术运算符,如下表所示

运算符

用法

描述

+opl+op2加

-opl-op2减

*opl*op2乘

/opl/op2除

%opl%op2取模(求余)

Java对加运算符进行了扩展,使它能够进行字符串的连接,如“

abc〃+〃de〃,得到串“abcde"。我们将在第七章中讲解。

与C、C++不同,对取模运算符%来说,其操作数可以为浮点数,如

37.2%10=7.2o

二、一元算术运算符,如下表所示:

运算符

用法

描述

++op正值

--op负值

++++op,op++加1

----op,op--减1

i++与++i的区别

i++在使用i之后,使i的值加1,因此执行完i++后,整个表达式的?

为i,而i的值变为i+lo

++i在使用i之前,使i的值加1,因此执行完++i后,整个表达式和i

的值均为i+lo

对i一与一i同样。

例3.1.下面的例子说明了算术运算符的使用

publicclassArithmaticOp{

publicstaticvoidmain(Stringargs[]){

inta=5+4;//a=9

intb=a*2;〃b=18

intc=b/4;//c=4

intd=b-c;//d=14

inte=-d;//e=-14

intf=e%4;//f=-2

doubleg=18.4;

doubleh=g%4;//h=2.4

inti=3;

intj=i++;//i=4,j=3

intk=++i;//i=5,k=5

System.out.printin("a="+a);

System.out.printin("b="+b);

System,out.printIn("c="+c);

System.out.println("d="+d);

System.out.printIn("e="+e);

System,out.println("f="+f);

System,out.println("g="+g);

System,out.printIn(/,h=/,+h);

System,out.printin("i="+i);

System,out.printin("j="+j);

System,out.printin("k="+k);

}

)

其结果为:

C:\>javaArithmaticOp

a=9

b=18

c=4

d=14

e=-14

f=-2

g=18.4

h=2.4

i=5

j=3

k=5

§3.2关系运算符

关系运算符用来比较两个值,返回布尔类型的值true或false?关系

运算符都是二元运算符,如下表所示:

运算符

用法

返回true的情况

>opl>op2opl大于op2

>+opl>=op2opl大于或等于op2

<opl<op2opl小于op2

<=opl<=op2opl小于或等于op2

==opl==op2opl与op2相等

!=opl!=op2opl与op2不等

Java中,任何数据类型的数据(包括基本类型和组合类型)都可以通

过==或!=来比较是否相等(这与C、C++不同)。

关系运算的结果返回true或false,而不是C、C++中的1或0。

关系运算符常与布尔逻辑运算符一起使用,作为流控制语?的判断条

件。如

if(a>b&&b==c)

§3.3布尔逻辑运算符

布尔逻辑运算符进行布尔逻辑运算,如下表所示:

oplop2opl&&op2opl||op2!opl

falsefalsefalsefalsetrue

falsetruefalsetruetrue

truefalsefalsetruefalse

truetruetruetruefalse

­&&、II为二元运算符,实现逻辑与、逻辑或。

・!为一元运算符,实现逻辑非。

•对于布尔逻辑运算,先求出运算符左边的表达式的值,对或运算如果

为true,则整个表达式的结果为true,不必对运算符右边的表达式

再进行运算;同样,对与运算,如果左边表达式的值为false,则不必

对右边的表达式求值,整个表达式的结果为falseo

下面的例子说明了关系运算符和布尔逻辑运算符的使用。

publicclassRelationAndConditionOp{

publicstaticvoidmain(Stringargs[]){

inta=25,b=3;

booleand=a<b;//d=false

System,out.println(/,a<b=,/+d);

inte=3;

if(e!=0&&a/e>5)

System,out.printIn(,,a/e=,/+a/e);

intf=0;

if(f!=0&&a/f>5)

System,out.printin(,,a/f=,,+a/f);

else

System.out.printIn(,,f=,,+f);

其运行结果为:

C:\>javaRelationAndConditionOp

a<b=false

a/e=8

f=0

注意:上例中,第二个if语句在运行时不会发生除。溢出的错,因为

e!=0为false,所以就不需要对a/e进行运算。

§3.4位运算符

位运算符用来对二进制位进行操作,Java中提供了如下表所的位运

算符:位运算符中,除〜以外,其余均为二元运算符。操作数只

能为整型和字符型数据。

3.4.1补码

Java使用补码来表示二进制数,在补码表示中,最高位为符号?,正数

的符号位为0,负数为1。补码的规定如下:

对正数来说,最高位为0,其余各位代表数值本身(以二进制?示),如

+42的补码为00101010c

对负数而言,把该数绝对值的补码按位取反,然后对整个数1,即得该

数的补码。如-42的补码为11010110(00101010按位取反

11010101+111010110)

用补码来表示数,0的补码是唯一的,都为00000000。(而在原码,反

码表示中,+0和-0的表示是不唯一的,可参见相应的书籍)。而且可

以用111111表示的补(这也是补码与原码和反码的区别)。

3.4.2按位取反运算符〜

〜是一元运算法,对数据的每个二进制位取反,即把1变为0,把0

变为1。例如:

0010101

1101010

注意,〜运算符与-运算符不同,〜217-21。

3.4.3按位与运算符&

参与运算的两个值,如果两个相应位都为1,则该位的结果为1例如:

0010101

〜1101010

注意,〜运算符与-运算符不同,〜21N-21。

3.4.3按位与运算符&

参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则

为0。即:

0&0=0,0&1=0,1&0=0,1&1=1

目录

Java入门(一)

Java入门(二)

Java入门(三)

JavaAH(四)

JavaAH(五)

Java入门(六)

Java入门(七)

JavaAH(八)

JavaAH(九)

回应删除举报广告2008-06-0318:27:07克洛泽大地(DREG)

第四章流控制

与C、C++相同,Java程序通过流控制来执行程序流,完成一定?个语

句组成的。语句可以是单一的一条语句(如c=a+b;),也可以复合语

句。

下面我们分别来介绍Java中的流控制语句,包括

1.分支语句:if-else,break,switch,return.

2.循环语句:while,do-while,for,continue.

3.例外处理语句:try-catch-finally,throw

最后我们简单介绍一下注释语句。

§4.1分支语句

分支语句提供了一种控制机制,使得程序的执行可以跳过?些语句不

执行,而转去执行特定的语句。

4.1.1条件语句if-else.

if-else语句根据判定条件的真假来执行两种操作中的一种,?的格

式为:

if(boolean-expression)

statement1;

[else

statement2;]

1.布尔表达式boolean-expression是任意一个返回布尔型数据的

达式(这比C、C++的限制要严格)。

2.每个单一的语句后都必须有分号。

3.语句statement!,statement2可以为复合语句,这时要用大括号(}?

起。建议对单一的语句也用大括号括起,这样程序的可读性强,而且

有利于程序的扩充(可以在其中填加新的语句)。{}外面不加分号。

4.else子句是任选的。

5.若布尔表达式的值为true,则程序执行statement!.,否则执行sta

tement2o

6.if-else语句的一种特殊形式为:

if(expression!){

statementl

}elseif(expression2){

statement2

}elseif(expressionM){

statementM

}else{

statementN

else子句不能单独作为语句使用,它必须和if配对使用。else总是

与离它最近的if配对。可以通过使用大括号{}来改变配对关系。

7.举例:

例4.1比较两个数的大小,并按从小到大的次序输出。

publicclassCompareTwo{

publicstaticvoidmain(Stringargs[]){

doubledl=23.4;

doubled2=35.1;

if(d2>=dl)

System,out.printin(d2+,,>=,,+dl);

else

System,out.printin(dl+,,>=,,+d2);

}}运行结果为:

C:\>javaCompareTwo

35.1>=23.4

例4.2判断某一年是否为闰年。

闰年的条件是符合下面二者之一:①能被4整除,但不能被100整除;

②能被4整除,又能被100整除。

publicclassLeapYear{

publicstaticvoidmain(Stringargs[]){

intyear=1989;//methodi

if((year%4==0&&year%l00!=0)||(year%400==0))

System,out.printIn(year+^isaleapyear.z,);

else

System,out.printIn(year+^isnotaleapyear.,z);

year=2000;//method2

booleanleap;

if(year%4!=0)

leap=false;

elseif(year%100!=0)

leap=true;

elseif(year%400!=0)

leap=false;

else

leap=true;

if(leap==true)

System,out.printIn(year+^isaleapyear.z/);

else

System,out.printIn(year+^isnotaleapyear.;

year=2050;//method3

if(year%4==0){

if(year%100==0){

if(year%400==0)

leap=true;

else

leap=false;

}else

leap=false;

}else

leap=false;

if(leap==true)

System,out.printIn(year+,zisaleapyear.");

else

System,out.printIn(year+,zisnotaleapyear.");

运行结果为

C:\>javaLeapYear

1989isnotaleapyear.

2000isaleapyear.

2050isnotaleapyear.

该例中,方法1用一个逻辑表达式包含了所有的闰年条件,方?2使用

了if-else语句的特殊形式,方法3则通过使用大括号{}对if-else

进行匹配来实现闰年的?断。大家可以根据程序来对比这三种方法,

体会其中的联系和区别,在不同的场合选用适?的方法。

4.1.2多分支语句switch

switch语句根据表达式的值来执行多个操作中的一个,它的般格式

如下:

switch(expression){

casevaluel:statementl;

break;

casevalue2:statement2;

break;

casevalueN:statemendN;

break;

[default:defaultstatement;]

1.表达式expression可以返回任一简单类型的值(如整型、实?、字

符型),多分支语句把表达式返回的值与每个case子句中的值相比。

如果匹配成功,则?行该case子句后的语句序歹人

2.case子句中的值valuel必须是常量,而且所有case子句中的值是

不同的。

3.default子句是任选的。当表达式的值与任一case子句中的?都

不匹配时,程序执行default后面的语句。如果表达式的值与任一

case子句中的值都不?配且没有default子句,则程序不作任何操

作,而是直接跳出switch语句。

4.break语句用来在执行完一个case分支后,使程序跳出switch语?,

即终止switch语句的执行。因为case子句只是起到一个标号的作

用,用来查找匹配的入口?从此处开始执行,对后面的case子句不

再进行匹配,而是直接执行其后的语句序列,因此该在每个case分

支后,要用break来终止后面的case分支语句的执行。在一些特殊

情况下,多个不同的case值要执行一组相同的操,这时可以不用

breako

5.case分支中包括多个执行语句时一,可以不用大括号{}括起。

6.switch语句的功能可以用if-else来实现,但在某些情况下,使

switch语句更简炼,可读性强,而且程序的执行效率提高。

7.举例J:

例4.3.根据考试成绩的等级打印出百分制分数段。

publicclassGradeLevel{

publicstaticvoidmain(Stringargs[]){

System.out.printin("\n**firstsituation**");

chargrade=,C);//normaluse

switch(grade){

case'A;:System,out.printIn(grade+,zis85〜100”);

break;case'B':System,out.printin(grade+,zis70〜84〃);

break;case'C):System,out.printin(grade+,zis60〜69");

break;case'D):System,out.printin(grade+,zisV60");

break;default:System,out.printin(''inputerror");

}System.out.printin('\n**secondsituation**");

grade='A';//createrrorwithoutbreakstatement

switch(grade){

case'A'System,out.printin(grade+“is85〜100”);

case'B):System,out.printin(grade+,,is70~84,/);

case'C'System.out.printin(grade+"is60~69");

case'D':System,out.printin(grade+,,is<60,/);

default:System.out.printin("inputerror");

}System,out.printin("\n**thirdsituation**");

grade=,B';//severalcasewithsameoperation

switch(grade){

case'A':

case'B':

case'C':System,out.printin(grade+,,is>=60,/);

break;case'D):System,out.printin(grade+,,is<60,/);

break;default:System,out.printin(,,inputerror,/);

运行结果为

C:\>javaGradeLevel

****firstsituation****

Cis60〜69

****secondsituation****

Ais85-100

Ais70〜84

Ais60〜69

Ais<60

inputerror

****thirdsituation****

Bis>=60

从该例中我们可以看到break语句的作用。

4.1.3break语句

1.在switch语中,break语句用来终止switch语句的执行。使程序

switch语句后的第一个语句开始执行。

2.在Java中,可以为每个代码块加一个括号,一个代码块通常用大

括号{}括起来的一段代码。加标号的格式如下:

BlockLabel:{codeBlock}

break语句的第二种使用情况就是跳出它所指定的块,并从紧?该块

的第一条语句处执行。其格式为:

breakBlockLabel;

例如:

a:{……〃标记代码块a

b:{……〃标记代码块b

c:{……〃标记代码块c

breakb;

...//willnotbeexecuted

//willnotbeexecuted

//willnotbeexecuted

/executefromhere

3.与C、C++不同,Java中没有goto语句来实现任意的跳转,因为goto

语句破坏程序的可读性,而且影响编译的优化。但是从上例可以看

出,Java用break来实现goto语句所特有的一些优点。如果brea

以介绍面向对象编程的基本概念、基本理论为重点,结合Java语言

的语法规则、编程特点和设计思想、强调容易发生错误和编程应注意

的地方,使学生能对Java技术有一个总体了解,通过本课程学习,

使学生掌握Java语言的基础知识,理解和掌握面向对象程序设计的

基本思想,熟练地使用Java语言进行程序的编写、编译以及调试工

作k后所指定的标号不是一个代码块的标号,而是一个?句,则这时

break完全实现goto的功能。不过应该避免这种方式的使用。

目录

Java入门(一)

Java入门(二)

JavaAH(三)

Ja

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论