第2章 Java语言概述.ppt

上传人:椰子壳 文档编号:5030134 上传时间:2020-01-29 格式:PPT 页数:151 大小:426.50KB
返回 下载 相关 举报
第2章 Java语言概述.ppt_第1页
第1页 / 共151页
第2章 Java语言概述.ppt_第2页
第2页 / 共151页
第2章 Java语言概述.ppt_第3页
第3页 / 共151页
第2章 Java语言概述.ppt_第4页
第4页 / 共151页
第2章 Java语言概述.ppt_第5页
第5页 / 共151页
点击查看更多>>
资源描述

《第2章 Java语言概述.ppt》由会员分享,可在线阅读,更多相关《第2章 Java语言概述.ppt(151页珍藏版)》请在三一文库上搜索。

1、第2章 Java语言概述,2.1 Java语言的优势与特点 2.2 Java语言的基本语法 2.3 流程控制语句,1991年,Sun公司的James Gosling等人,为在电视机、烤面包箱等家用消费类电子产品上进行交互式操作而开发了一个名叫Oak(一种橡树的名字)的语言。由于商业上的种种原因,这种语言始终没有投放到市场中,而且连Oak这个名字也成了问题,因为已经有上百家公司在使用这个名字,所以Sun公司根本无法将之注册为商标。最终,Sun公司决定,将这种语言改名为Java,并且在互联网上发布,免费提供下载。,当时,由于Oak的失败,有一些传谣者鼓吹Java这些字母代表“只是又一个无意义的缩写

2、词“(Just Another Valueless Acronym)。Sun公司否认了这一说法,而且说Java是语言开发者在喝一种原产于印度尼西亚爪哇群岛的咖啡时,出于一时的灵感而碰撞出的火花。,几个月后,出乎所有人的意料,Java成为赛博空间最热门的话题。Java被越来越多的用户使用,受到越来越多的重视。上百个Java小应用程序在互联网上的多媒体应用中流行起来。一些著名的公司,如微软、IBM、苹果电脑、数字设备公司,纷纷购买了Java语言的使用权,随之大量出现了用Java编写的软件产品。Java受到业界的重视与好评。微软总裁比尔盖茨在悄悄地观察了一段时间后,也感慨地说:“Java是长时间以来

3、最卓越的程序设计语言“。,Java为什么会在短时期内受到如此多的程序员欢迎?为什么在计算机行业竞争激烈的今天,一个计算机硬件公司开发出来的语言,会一下子得到几乎世界上各大计算机软、硬件公司的支持呢? Java最重要的特征在于它的操作平台无关性,这是以往任何一种语言都不具备的特征。也就是说,用Java语言编写的程序可以在任何一台计算机上运行,而不管该计算机使用何种操作系统,要知道,这可是广大程序员的一个梦想。,其次,Java是一种面向对象的语言。长期以来,人们一直在设法争取问题空间同求解空间在结构上的一致,以使我们在分析、设计和实现程序时,同我们认识客观世界的过程尽可能一致,因此产生了面向对象的

4、程序方法。Java就是这样一种面向对象的语言,不仅如此,它还代表了面向对象程序设计方法在目前的最高应用水平。对一个程序员来说,这意味着可以将注意力集中在应用程序的数据和处理数据的方法上,而无需过多地考虑处理过程。,此外,Java还是一种非常简单的语言。Java的前身Oak,是为家用电器产品设计的,只有简单易用才能推广开来,因此,这种语言被设计得简单而高效。程序员只需理解一些基本的概念,就可以用它编写适合各种情况的应用程序了。 最后,安全性也成为Java受青睐的一个方面。因为在网络环境中,安全是需要认真考虑的一个问题。没有安全的保障,用户绝对不会从Internet上随意一个站点上下载一个Java

5、小应用程序,并在自己的计算机上运行。Java语言提供了若干种安全机制来抵御病毒产生或侵入文件系统。这一点也让用户们非常放心。,Java的出现确实给计算机行业吹来了一股清风;它带来了很多新鲜而有趣的思想和观念;它甚至改变了人们使用计算机的方式。就连环球信息网WWW的创始人也说:“计算机行业发展的下一个浪潮就是Java,并且很快就会发生。“ 如今,在美国硅谷,不懂得Java的人是无法找到工作的。在我国,许多计算机权威人士都断言,谁先掌握了Java,谁就号准了世界的脉搏,就能在信息时代找到自己的立足之地。,研究机构Evans Data公司最近公布的调查结果显示,Java将在2003年超过C/C+成为

6、全球软件开发人员的首选语言。 参加本次调查的编程人员来自60多个国家,他们中60%的人在2003年将更多地使用Java,所用时间超过使用C/C+或VB。公布本次调查结果的Evans Data公司副总裁Garvin说,自该公司1998年首次开始跟踪Java的使用情况起,Java用户总数不断增加。她说:“Java在北美之外的发展更强劲。至少一半被调查的来自各国的开发人员目前使用Java。事实上,他们使用Java的平均时间由1999年的9.1%上升到目前的17.7%。,“尽管最初存在由于Sun公司的专有立场和该公司与操作系统社区的矛盾而造成的有关Java的争议,但是Java不断作为技术“热点“蚕食C

7、/C+市场。其主要原因是Java具有许多C+所没有的优点,如简单性、更好的内存管理和跨平台功能。相反,在过去三年里,C+在各国开发人员中的占有率减少。Evans Data说,目前被调查的开发人员有25%的时间使用C+,而这一数字将在2002年进一步减少。但是这家市场研究机构仍认为C/C+由于其已经生成的巨大代码量,不可能很快消逝。,至于C#,一种与C+相似但与Microsoft.Net倡议密切相连,具备类似Java语言特性的新语言,这份调查显示,3/4的开发人员表示还没有采用它的计划。Garvin说,有可能采用C#的开发人员可能是那些已经使用某种Microsoft编程语言的用户。,2.1 Ja

8、va语言的优势与特点,Sun公司这样形容自己的Java语言:它是一种简单、面向对象、分布式、解释型、稳定、安全、结构中立、易移植、高性能、多线程的动态语言。这段长长的定语准确地描述了Java语言的基本特征,也道出了Java为何流行的秘密。,可以说,程序设计语言的优点,Java几乎全都拥有。从实际的应用开发来看,也确实如此。但有一点需注意的是,由于Java是经过编译器生成字节码后再通过解释器对其解释执行,其运行速度会比较慢。下面就上述的特点逐一进行阐述。,1简单性 Java是一种简单的语言。这点主要表现为简单易学,在形式上它和C/C+极为相似,而且其运行系统小(Java的基本解释器只有40 KB

9、,加上标准库和线程支持也不过215 KB)。 我们知道,C+中的结构、联合和类的概念重合之处很多,而Java只保留了类的概念,减少了复杂性。运算符重载是C+的一大特点,一度被认为简化了程序设计,但实际上用得非常少,作用也不大,反而加重了程序员的负担,Java把它也给去掉了。,多重继承一直是一个有争议的问题,赞成者认为它为面向对象语言带来了方便性和通用性,增加了语言的表达能力,反对者声称它是一个不必要的特征,容易混淆,难以使用,浪费机器资源,实际价值有限,所以Java把它也取消了,而带之以接口“interface“。Gosling同时认为,C+的预处理程序、标题文件、goto语句和隐式类型转换,

10、都增加了程序的不可读性,容易出问题,所以全部给取消了。,2面向对象 在程序的开发设计过程中,程序员一直在设法争取问题空间同求解空间在结构上尽可能一致,以使我们在分析、设计和实现程序时,同我们认识客观世界的过程尽可能地一致,因此产生了面向对象程序设计方法。所谓面向对象的设计方法,是基于信息隐藏和抽象数据类型概念,把系统中所有资源,如数据、模块以及系统都看成是对象。每个对象封装数据和方法,而方法实施对数据的处理,并且通过继承机制实现代码复用。,传统的面向对象语言各有不足,如C+语言,由于继承了C的大量特性,如独立的函数概念,因而变得复杂而难用,而纯粹的面向对象语言如Smalltalk、Eiffel

11、,却是动态性有余,效率不高。Java完全具备面向对象的四大特点:封装、继承、多态和动态。其封装性比C+好,它没有全程变量,没有主函数main。在Java中绝大部分成员是对象,只有简单数字类型、字符类型、布尔类型除外,以便保持高性能。Java提供给用户一系列的类(class),一个或多个class可以组成一个包(package)。Java的class和C+的一样有层次结构,子类可以继承父类的属性和方法。Java类中方法均缺省为虚函数。,Java的面向对象与许多语言都有相通之处,与C+自不必说,因为Java几乎是C+的一个子集,熟悉C+编程的人很快会习惯Java编程。学过Pascal的读者对Jav

12、a可能也有似曾相识的感觉,因为Java的package和Pascal中的Unit非常相似,都是表示某些程序块的输入。运算符重载在C+中一向被认为是一种优雅的多态机制,但在实践中,人们发现,运算符重载会使程序变得难以理解,Java的设计者最后取消了运算符重载,只在字符串连接运算中留了一些运算符重载的痕迹,例如用“+”实现字符串的连接。,Java语言面向对象结构的动态性很高,C+中,如果修改了某一个类,整个程序都得重新编译。在Java中,可以在类库中自由地加入新的方法和实例变量,而不影响用户的程序执行。虽然C+也可以实现这种动态性,但使用起来非常复杂,代价也很高。,3分布式 Java是一种面向对象

13、的程序设计语言,它也支持网络上的应用程序,是一种分布式(distributed)程序设计语言。使用Java提供的类库,比如,可以方便地支持TCP/IP协议,完成各种层次上的网络连接。请看下面一个简单的ftp登录的例子:,. FtpClient f_client; f_client=new FtpClient(“hostname“); f.login(“anonymous“,“); f.binary(); .,另外,Java提供一个Socket类,这个类可以提供可靠的流式网络连接。这样,我们可以非常方便地创建分布式的Client和Server应用程序。传统的网络编程是一件复杂的事情,但是通过Ja

14、va提供的网络类库,可以轻易地构造出网络应用,如客户机/服务器应用,浏览器/服务器应用,大大简化了工作难度。正如Java的设计者Gosling所说,Java的设计就是为了“最大限度地利用网络”。,4解释型 我们知道,Java的编译器产生的是字节代码,可把它理解为一种中间代码,而不是特定的机器码。该字节码必须运行在一个解释器上,所以说,Java是一种解释型语言。由于产生的是中间代码字节代码,因而可达到与平台无关的目的,从而可高效地在不同平台之间传输。同时,该程序可在任何平台上运行,只要这个平台上安装了Java解释器和运行系统即可。 在解释环境中,程序开发过程中标准的“链接”过程没有了,Java的

15、“链接”实际上是把一个新类加载到当前的环境中,这和传统的程序开发过程中的编译、链接、测试有较大的区别。,5健壮性 分布式计算环境要求软件具有高度的健壮性。C+程序员都知道其在稳定性方面的最大问题在于指针的使用和缺乏自动的内存管理。这使得程序员可能编写出在语法和语义上均正确,但却可能对系统产生巨大破坏作用的软件。Java是一种比C+还强的强壮型语言。它要求显式的方法声明,保证编译器可以发现方法调用错误。Gosling认为指针的主要作用在于数组和结构的访问及使用。Java的数组可以解决前者的问题,但加强了对数组下标的检查。结构的访问和使用可通过类及类的方法访问变量解决,因而可以取消指针的概念。,J

16、ava语言稳定性的另一个方面是自动的内存管理。用过C/C+的读者知道,比如我们可以调用函数malloc()来进行内存的分配,但在使用完后,必须要对占用的资源进行释放,即再调用free()函数释放掉分配的内存,如果稍不小心,就可能造成系统故障或空间的浪费。Java中专门有一个后台垃圾自动收集程序Garbage Collector。它以较低的线程优先级对存储器进行扫描,自动释放掉不再使用的存储碎片,从而使程序员不用再担心内存的使用,只是专注于程序的设计即可。,异常处理也是Java健壮性的一个方面。一般认为,异常处理是成熟语言的标志。在Java中,通过使用try/catch/finally语句,程序

17、员可以把一组错误处理代码放在一个集中的地方统一处理,这可简化错误的处理及错误的恢复。,6安全性 Java的安全性和健壮性是紧密联系的,由于其主要应用于网络程序的开发,因而如果没有较高的安全性作为保障的话,用户从网络上下载程序将是非常危险的。正如我们前面所描述的,Java取消了指针,杜绝了不怀好意的程序对内存恶意篡改。,Java语言的安全机制基于“不存在可信任的代码”的概念。其运行环境提供了以下四级安全保障机制: 字节码校验器 类装载器 运行时内存布局 文件访问机制,当Java字节码进入解释器时,首先必须经过字节码校验器的检查。校验器就象一个忠诚的卫士,不能通过检查的一律不准入内。即使是Java

18、编译器生成的完全正确的字节码,校验器也必须再次对其检查,因为Java程序的编译和解释执行期间,字节码可能会无意或恶意地被篡改过。然后,Java解释器将决定程序中类的内存布局,这就意味着不怀好意的程序无法预先知道一个类的内存布局结构,因而也就无法利用该信息来修改或破坏系统。,随后,类装载器负责把来自网络的类加载到单独的内存区域,类和类之间相互不会干扰。最后,客户端用户还可以限制从网络上加载的类只能访问某些被允许的系统,如文件和硬盘。所以,当这几种机制加在一起,再加上其他的增强办法,如传输过程中使用加密解密算法,程序中做上特殊的标记等,使得Java成为了最安全的系统之一。,7可移植性 Java语言

19、的可移植性具有深远的意义,它不仅给软件开发者带来了“一次性开发”的方便,而且迎合了网络计算的思想。在Java以前,人们只是将Internet当作一个巨大的硬盘,里面有无数的静止信息。当Java出现后,Internet则变成了一个巨大的操作系统,Java就是这个系统的语言。用这个语言写的任何程序,如电子表格软件,存放在某台机器上,Internet网上的任何用户只要得到许可,就可以下载并运行这个程序,从而节省了大量的硬盘空间,也省去了管理的麻烦。,Java的设计者采用了多种机制来保证可移植性,最主要的有: (1) Java从本质上讲是解释型的,这意味着任何一台机器,只要配备了Java解释器,就可以

20、运行Java程序。 (2) Java的数据类型在任何机器上都是一致的,它不支持特定硬件环境的数据类型。 总之,Java的可移植性决定了它将成为未来网络环境的“世界语”。,8高性能 由前所述,我们知道Java是一个解释型语言。按照系统结构的观点,解释型语言除不可能达到编译型语言的速度外,其他一些性能并不比编译型语言差。有人作过测试,Java程序的平均运算速度是C语言的1/20倍。为了解决高性能问题,Java的设计者正在努力开发出一种更具效率的编译器,这种编译器可以在运行时把Java的字节码翻译成特定CPU的机器码,从而使转化成机器码的字节码在性能上接近于C或C+。,9多线程 Java高性能的另一

21、个方面是它的多线程能力,他可以同时运行多个线程,处理多个任务。多线程可称为“轻量级进程”,它有点像Unix下的进程概念,多线程即多个模块并行运行;通过消息协调操作;通过信号灯和锁保证关键模块的执行不被中断。线程之间可以共享内存和全局变量,比进程的开销要小得多,因此也可以将线程看作可以同时运行的函数。多个线程的并行执行,仿佛有多个CPU在运行。比如说,一个线程在执行复杂的计算,而另一个线程完成与用户的交互。用户不必停下来等待Java程序完成冗长的操作,所以,多线程能够增强用户的实时交互能力,提高程序的运行效率。,传统的语言程序中,多线程编程是相当繁琐的,因为同一时刻要发生许多事情,程序员必须考虑

22、它们的执行顺序、同步管理、资源争用等情况。例如当使用C或C+语言开发多线程应用程序,首要的困难是要保证多个例程可被若干并发线程运行。如果一个例程改变了状态变量的值,那么一次只可能有一个线程执行。同时,它还需要程序员负责例程的锁定与释放,且非常容易形成“死锁”。,Java还通过关键字synchronized来保证两个或更多的线程不会同时执行一个被声明为同步的方法,从而保证某些关键操作(如写数)顺利进行而不会被中断。 当然,Java的同步策略也有问题,当被标记为synchronized的函数执行时间较长时,就可能造成很多线程在等待该同步函数,而阻止了程序的其他非同步部分的执行,降低了执行效率。,2

23、.2 Java语言的基本语法,与C/C+相似,Java的数据类型可以分为两大类型:基本类型(简单数据类型)和引用类型(复合数据类型)。简单类型包括整型(integer)、浮点型(float)、字符型(char)及布尔型(boolean)。简单数据类型用户通常是不能修改的,它用来实现一些基本的数据类型。,复合数据类型有类(class)、接口(interface)和数组(array)。复合数据类型是用户根据用户的需要定义并实现其运算的类型。简单类型的数据在函数调用中是以传值方式进行的,而复合数据类型在函数调用中则是以传地址的方式进行的。Java的数据类型可用图2.1表示。,图 2.1,整数类型 b

24、yte、short、int、long 浮点类型 float、double 字符型 char 布尔类型 boolean 类 class 接口 interface 数组 array,基本类型,引用类型,数据类型,变量是Java程序中的基本存储单元,它由类型和标识符构成。Java字符集支持扩展的16位字节码(Unicode字符集),提供多语言支持。表达式是常量、变量、方法调用以及一个或多个运算符的任意组合,是构成Java语言的基本单元。 本节我们将介绍Java中简单数据类型、变量、表达式及运算符的基本内容。,2.2.1 数据类型 Java程序都是由数据和对数据进行的操作构成的。数据是计算机用的基本数

25、据,数据类型决定了数据的取值范围和运算符号。 1整型 Java语言的整型数据与C/C+相似,按照存储位的不同,分为byte、short、int、long四种,分别表示从8位到64位的整数。,表2.1列出了整型所占内存位数和取值范围。其中,int和long类型是最常用的类型,而byte类型经常用在字节码数据中,比如网络传输数据或进行二进制数据的输入/输出时。由于short类型在使用时要求数据的存储须先高字节后低字节,在某些机器中可能会出错,故使用较少。,表2.1 整型数属性表,同C语言一样,Java的整数也可以用十进制、八进制和十六进制来表示。八进制数以O打头,数字字符为07;十六进制数用Ox(

26、OX)打头,数字字符为09、af或AF。一个整型数隐含为int型,如果需要long类型的数,必须在该数后加上字母l (L)。 2浮点型 Java的浮点类型分为两种:单精度浮点数和双精度浮点数,分别用关键字float和double来表示。与C/C+不同,它们的存放位长与机器无关。表2.2给出了浮点数的属性。,表2.2 实型数属性表,浮点数的隐含类型为double型,当我们要float型的数时,就需要显示说明,即在该数后跟一个字母f,告诉编译器该数为float类型。不管是double型还是float型,当对实数使用比较运算符“= =”时,由于精度的取值问题,必须小心使用。单精度实数的有效位为:二进

27、制23位,十进制为7位精度。双精度实数有效位为:二进制52位,十进制为15位精度,多余位四舍五入。下面是实型变量定义的例子: float variable1; / variable1 为单精度浮点数 double variable2; /variable2 为双精度浮点数,3布尔型 Java中布尔型变量只有两个值:真(true)或假(false)。与C/C+不同,布尔型数据是独立的数据类型,所以既不能将整数值赋给布尔变量,也不能将布尔类型的数转换成整型或其他类型。布尔型数据在机器中位长为8位。布尔型数据的定义举例如下: boolean sign=true; 上例定义sign为布尔变量,且初值为

28、true。,4字符型 Java中字符型变量的类型为char,它是一个16位的Unicode码,而不是我们在C中所见到的8位ASCII码。下面用关键字char定义一个字符变量: char a=b; /定义一个初值为“b”的字符型变量 在C语言中,字符与无符号整数是一样的,因而可以混合运算,不会产生什么问题。可是在Java中,由于Java没有无符号整型类型,因而字符型数据不能用作整数。但可以通过转换来进行变通,如: char a=a; char b=(char) (a+1);,即字符变量a转换为整数97后与1相加,最后转换成字符“b”。 同C/C+相同,Java字符集中一些不能显示的控制字符可以用

29、转义序列来表示,如表2.3所示。,表2.3 转义字符表,2.2.2 变量 变量是Java程序中的基本存储单元。实际上,数据在存储器中地址的代号,包括变量名、变量类型和作用域三个不同部分。与C/C+相似,Java变量必须先定义,后使用。,1变量标识符 Java中标识符是类、对象、界面、方法、变量和用户定义的对象的集合。为使非英语国家的程序员方便地用自己的母语定义标识符,Java标识符采用Unicode字符集,可为任意长度。Java中规定,标识符必须以字母、下划线( _ )或美元符( $ )为首字母,后面字符由一个或多个字母、下划线、美元符或数字组成。下面我们对Java中两个特殊的标识符注释和关键

30、字加以说明。,1) 注释 注释用来解释程序的正文,增强程序的可读性。它只是为程序起一个说明的作用,在编译系统作词法分析前会被忽略掉。Java语言提供了三种形式的注释: / text:行注释,从“/”到本行结束的所有字符均作为注释而被忽略。 /*text*/:多行注释,从“/*”到“*/”之间所有字符被忽略。,/*text */:这是Java语言特有的注释,同“/*”相似,表示从“/*”到“*/”之间所有的字符均为注释。它只能紧邻在某一个声明之前使用,作为该声明的注释,注释的内容被包含进java.doc程序自动生成的文档中。,上面注释的使用中,我们必须要注意的是,Java的注释不允许有嵌套注释,

31、注释串不允许出现在字符值或字符串内。下面举例说明: /* try this /* again! / /* everybody. */ / its a comment /* another comment */ 上两例均表示一个注释。 System.out.println(“Is this a comment?/ delete me“); 该语句输出为“Is this a comment?/delete me”,而不是我们想当然的“Is this a comment?”。,2) 关键字 Java中的关键字是编译器预留的,不能挪作他用,如果用户拿关键字作为自己的变量标识符,则会出错。下面我们给出J

32、ava中的关键字。 abstract boolean break byte byvalue case cast catch char class const continue default do double else extends false final finally,float for future generic goto if implements import instanceof int Interface inner long native new null operator outer package private Protected public rest retur

33、n short static super switch synchronized this Throw transient true try void while var volatile,2变量缺省初始值 任何一门编程语言中定义的变量都对应一个值,不存在没有值的变量。当定义一个变量而没有对其初始化时,系统默认其初始值为缺省初始值。不同数据类型的缺省初始值如表2.4所示。,表2.4 变量的缺省初始值,3变量的作用域 我们知道,变量在使用前必须先要进行声明,其基本格式为 accesstype variabletype variablename =value,variablename=value;

34、 例如: protected float grade; boolean sign;,在上面的描述中,第一个参数为访问类型,它是可选项。Java的变量访问类型有四种:public、protected、private protected、private。后面会对这四种类型作详细说明。数据类型可以是基本的数据类型、类和接口。变量的说明可在使用位置之前的任何地方进行。 在使用变量时,需考虑其作用范围,即作用域的问题。从变量的定义格式我们可以知道,确定变量的作用域包含两个方面:一个是其访问类型;另一个为变量在程序中声明的位置。Java中变量四种访问类型的具体作用如表2.5所示。,表2.5 变量访问类型的

35、说明,另一个影响变量作用域的因素是变量声明的位置。在程序中,当我们用“ ”括起一段代码时,相当于定义了一个新的域层次。作用域层次的作用是判断一个变量是否可以访问和在什么时候失去效用。与C/C+相同,一个变量只有当它在当前的作用域层次或比它更高的层次中被声明时,才能在当前作用域层次中使用访问,一旦离开一个作用域层次,在该层次中定义的所有变量就不能被访问了。,2.2.3 运算符及表达式 运算符是对一个或多个操作数进行某种特定运算的标志符号。在Java中,运算符很丰富,有常用的算术运算符、逻辑运算符、位运算符和对象操作运算符。如果我们按操作数的多少来分,又有单目运算符、两目运算符及三目运算符。表达式

36、是运算符、常量和变量的组合。在这节中,先介绍运算符的基本概念,然后讨论表达式的用法。,1算术运算符 与C/C+相似,Java算术运算符用于整型或实型数的运算,可分为一元运算符和二元运算符两种。一元运算符如表2.6所示。,表2.6 一元算术运算符表,上表中,自增、自减运算符既可以放于操作数之前,也可以放于操作数之后,这是初学者需注意的地方。当放在操作数之前,则是先进行自增/自减运算,再把其结果用于后继的操作;如果放在操作数之后,则是先进行别的运算,然后再进行自增/自减运算。另外,自增/自减运算符只能作用于变量,而不能作用于常量或表达式。看下面的例子: int i=2; int j=3; int

37、m=+j+i; int k=m+i+;,在运行完上述四条指令后,i,j的值均加1成为3,4,而m,k的值变成了6,8。需要注意的是,由于第三条语句中出现了+j,故m的值为6,第四条语句中是i+,所以k的值为8。从上面的例子中,可以知道,自增/自减运算符使用灵活,但容易造成副作用,实际应用时须十分小心。再看一个例子: int i=2; int j=3; System.out.println(i+j); System.out.println(+j);,当运行上述的四条指令时,第三条指令的输出结果为5,而第四条指令出错。这是因为对于第三条指令而言,系统把i+j解释为i+(+j),结果为5,而第四条指

38、令被解释为+(+j),由于自增/自减运算符不能作用于表达式,所以出错。 Java的二元运算符有+,?,*,/,%五种,其用法与C/C+类似,见表2.7所示。,表2.7 二元运算符用法表,前四条运算符都是常用的算术运算,第四条运算符为取模运算,即求两操作数相除的余数:当被除数为正时,结果为正,当被除数为负数结果为负。 实际应用中,算术运算的操作数常常具有不同的类型,比如说,一个操作数为int型,另一个操作数为long型,一旦碰到这种情况,就需要进行类型的转换。一般原则是保证结果的数据类型与精度最高的操作数数据类型一致。转换规则如表2.8所示。,表2.8 类型转换规则,2关系运算符 关系运算符用于

39、两个值之间的关系比较,其返回值为布尔类型,表2.9给出了关系运算符的使用方法。,表2.9 关系运算符表,我们知道,在C/C+中,真或假的值是用“1”或“0”来表示的,而在Java中关系运算符的结果则要么为true,要么为false。另外,在关系运算符的使用中,算术类型只能与算术类型比较,布尔类型、复合类型也只能与同类型相比较。 3布尔运算符 与C/C+不同,Java中,逻辑运算符只能对布尔逻辑型数据进行操作,其返回值同样为逻辑型布尔值。其用法如表2.10所示。,表2.10 逻辑运算符表,逻辑运算符中,逻辑与( .,4位运算符 位运算符用来对二进制数进行测试、置位或移位等操作,操作数只能为整型或

40、字符型数据,其用法如表2.11所示。 对于上表中前四种运算符,其真值表如表2.12所示。,表2.11 位运算符表,表2.12 位操作真值表,下面我们看一个按位异或的例子: . int x=17; int y=10; System.out.println(“The value is“+xy); . 该段程序的输出结果为27,其实际运算如下: x: 10001 y: 01010 : 11011=27,至于后面三种运算符,均属于移位运算符。在不产生溢出的情况下,左移一位相当于乘2,故有: x*12=x* (8+4) =x”将操作数移出右端的低位舍弃,把最高位作为补位,所以,右移一位相当于除2取商,与

41、左移相似,有: x/8=x3 运算符“”是无符号右移,不考虑最高位的符号位,所以补位均为0。,例2.1 import java.lang.Math; public class Move public static void main(String args) int x,y; int n=1; long result=0; x=(int) (Math.random()*300); y=(int)(Math.random()*400); for(int i=0;i=32;i+) if(y, System.out.println(“The result is“+result); 在本程序中,我们利

42、用类Math中的随机函数random()来产生两个整数,由于该函数返回值为double型,因而我们利用了强制类型转换来进行赋值。运行结果为 System Output: The result is21357 System Output: The result is18655,5赋值运算符 赋值运算符“=”把一个数据赋给一个变量,其一般形式为 variable_type variable_name=expression; 例如: int x=100; int y=200; float z=100.0;,Java中赋值语句与C/C+相似,可以分为简单赋值运算符和复合赋值运算符两类。比如,上面的例子

43、就是简单的赋值语句。当赋值符号“=”前面加上不同的运算符组成一些复杂的赋值语句后,就成了复合赋值运算符。如: x/=2; / 等价于 x=x/2; x%=4; / 等价于 x=x%4; 赋值运算符的基本用法可见表2.13。,表2.13 复合赋值运算符用法表,6条件运算符 条件运算符是一个三元运算符,其一般形式为 expression ? statement1 :statement2; 其语义为:首先计算表达式expression的值,如果该值为真(true),则将statement1的值作为整个表达式的值,反之,将statement2作为整个表达式的值。如: max= x y ? x :y;

44、该语句取x,y的最大值。需要注意的是,该运算符规定statement1和statement2需返回相同类型的数据,且不能为void。,7对象运算符 Java中对对象的操作有专门的对象运算符instanceof。它用来测试一个对象是否是某个类或其子类的实例,若是则返回true,反之返回false。例如: . if(e.target instanceof MenuItem) String nam=(String) e.arg; . 该段代码功能是测试组件上产生的事件是否对应于菜单。,8运算符的优先级 运算符是有优先级的,它决定表达式中各运算执行的先后顺序。总的来说,运算符优先级具有如下规则: (1

45、) 一元运算符比二元运算符优先级高。 (2) 算术运算符比关系运算符优先级高。 (3) 关系运算符比按位运算符优先级高。 (4) 大于和小于运算符比等于和不等于运算符优先级高。 (5) 按位运算符比逻辑运算符优先级高。 (6) 逻辑与(&)比逻辑或(|)优先级高。 (7) 赋值运算符优先级最低。,表2.14 运算符的优先级及结合性,9表达式 表达式是由运算符和操作数组合而成的,包含常量、变量、方法以及一个或多个运算符。一个表达式包含的多个操作,其顺序是由各运算符的优先级和是否有括号操作符决定。当表达式在完成运算之后,返回一个值,其数据类型由参加运算的数据的类型决定。,2.3 流程控制语句,流程

46、控制语句提供了控制程序执行步骤的基本手段,可以说是程序的核心部分。我们知道,任何程序决不会只是顺序地执行语句序列,程序运行时需要同用户进行交互,需根据用户的输入决定执行序列,这就需有条件转移及循环执行。Java同其他编程语言一样,提供了许多流程控制语句。本节我们讨论其流程控制语句的基本语法及特点。,2.3.1 概述 Java所提供的流程控制语句几乎与C/C+完全相同。具体来说,Java的流程控制可通过如下一些语句来实现: while和do-while语句 for语句 if-else语句 switch语句 异常处理语句 分支语句,Java与C/C+之间的差别很细微,可归纳为两点: (1) 在C语

47、言中,条件表达式可以是数值型,而在Java条件语句中,条件表达式必须是布尔型,不能是数值。 (2) Java取消了对goto语句的支持。goto语句的使用一直是程序设计者争论的话题,这是因为goto语句的使用不仅降低了程序的可读性,而且往往会带来一些不可预测的错误。 对于Java中流程控制语句的使用情况,我们可通过表2.15来描述。,表2.15 控制语句的用法,2.3.2 条件语句 条件语句if-else控制条件的转移。if语句对给定的条件加以判断,根据判定结果执行相应操作;如果表达式为真,执行if语句体,如果为假,则执行else后面的语句体。 if语句可以使程序根据一些条件有选择地执行语句。

48、比如可在程序中设置boolean变量DEBUG的值来打印调试信息。如果DEBUG是true,程序就打印出调试信息;反之就不打印。,具体的程序如下: if (DEBUG) System.out.println(“DEBUG Information: x = “ + x); 上面是一个简单的if语句的例子。总的说来,if语句分为简单条件语句和复合条件语句,其语法格式为, 简单条件语句 if (condition ) 或 if (condition) statement1; statement; else statement2;, 复合条件语句 if(condition1) statement1; else if (condition2) statement2; else if(condition3) statement3; . else statementN;,比如当程序需要根据不同的输入信息执行不同的操作(例如经常碰到的对话框的选项操作)时,可以使用if和else语句来实现这个目的: / response is either OK or Cancel depending / on the button that the user pressed if (response = = OK) / 在这里添加执行OK动作的代码 else / 在这里添

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1