《Java语言程序设计基础课件》由会员分享,可在线阅读,更多相关《Java语言程序设计基础课件(78页珍藏版)》请在金锄头文库上搜索。
1、第第3章章 Java语言程序设计基础语言程序设计基础3.1 3.1 JavaJava语言程序的基本构成要素语言程序的基本构成要素语言程序的基本构成要素语言程序的基本构成要素3.2 3.2 数据类型数据类型数据类型数据类型3.3 3.3 运算符运算符运算符运算符3. 3.4 4 常用常用常用常用JavaJava数值计算方法数值计算方法数值计算方法数值计算方法3. 3.5 5 表达式表达式表达式表达式3. 3.6 6 包装类包装类包装类包装类3. 3.7 7 输入输出初步输入输出初步输入输出初步输入输出初步3. 3.8 8 流程控制流程控制流程控制流程控制3. 3.9 9 数组和字符串数组和字符串
2、数组和字符串数组和字符串3.1Java语言程序的基本构成要素语言程序的基本构成要素3.1.1 标识符标识符程序中使用的各种数据对象,如符号常量、程序中使用的各种数据对象,如符号常量、变量、方法和类等,都需要一定的名称,这种变量、方法和类等,都需要一定的名称,这种名称叫做标识符(名称叫做标识符(Identifier)。)。Java的标识符的标识符由字母、数字、下划线(由字母、数字、下划线(_)或美元符()组)或美元符()组成,但必须以字母、下划线或美元符开始。成,但必须以字母、下划线或美元符开始。Java标识符是大小写敏感的,也就是要严格地标识符是大小写敏感的,也就是要严格地区分大小写,否则会出
3、错。这点是初学者学习区分大小写,否则会出错。这点是初学者学习Java语言时要特别注意的。另外,语言时要特别注意的。另外,Java标识符标识符没有字符数的限制。没有字符数的限制。Java要求表示类、接口名的标识符用要求表示类、接口名的标识符用大写字母开头,表示变量、方法名的标识大写字母开头,表示变量、方法名的标识符用小写字母开头,表示常量名的标识符符用小写字母开头,表示常量名的标识符中全部使用大写的字母。中全部使用大写的字母。3.1.2 保留字保留字保留字(保留字(ReservedWord)又称为关)又称为关键字,是键字,是Java语言本身使用的标识符,它语言本身使用的标识符,它有其特定的语法含
4、义。所有的有其特定的语法含义。所有的Java保留字保留字将不能被用做标识符,如将不能被用做标识符,如for、while、boolean等都是等都是Java语言的保留字。语言的保留字。abstractabstractbooleanbooleanbreakbreakbytebytecasecasecatchcatchcharcharclassclassconst*const*continuecontinuedefaultdefaultdododoubledoubleelseelseextendsextendsfalsefalsefinalfinalfinallyfinallyfloatfloatf
5、orforgoto*goto*If Ifimplementimplements simportimportinstanceofinstanceofintintinterfaceinterfacelonglongnativenativenewnewnullnullpackagepackageprivateprivateprotectedprotectedpublicpublicreturnreturn表表3-1Java保留字表保留字表abstractabstractbooleanbooleanbreakbreakbytebytecasecasecatchcatchshortshortstatic
6、staticstrictpstrictpsupersuperswitchswitchsynchronizesynchronized dthisthisthrowthrowthrowsthrowstransient*transient*truetruetrytryvoidvoidvolatilevolatilewhilewhile续表续表注:加注:加*号的保留字是号的保留字是Java目前还未用的目前还未用的3.1.3 分隔符分隔符分隔符用来分隔开分隔符用来分隔开Java程序中的基本程序中的基本语法元素,可分为注释、空白符和普通分语法元素,可分为注释、空白符和普通分隔符隔符3种。种。1注释注释在程
7、序中加适当的注释可提高程序的可在程序中加适当的注释可提高程序的可读性。注释有如下读性。注释有如下3种形式。种形式。(1)行注释符)行注释符 “注释内容注释内容” (2)多行注释符)多行注释符 “*注释内容注释内容*”(3)Java文档注释符文档注释符“*注释内容注释内容*”2空白符空白符空白符包括空格符、回车符、换行符空白符包括空格符、回车符、换行符和制表符等。在使用中,多个空白符与一和制表符等。在使用中,多个空白符与一个空白符的作用相同。个空白符的作用相同。3普通分隔符普通分隔符普通分隔符具有确定的语法含义,要普通分隔符具有确定的语法含义,要按照语法规定去使用。有如下按照语法规定去使用。有如
8、下4种分隔符。种分隔符。大括号(大括号()分号(;)分号(;)逗号(,)逗号(,)冒号(:)冒号(:)3.2数数据据类类型型 计算机程序处理的对象是各种数据,计算机程序处理的对象是各种数据,数据类型是指数据的内在表现形式。根据数据类型是指数据的内在表现形式。根据现实世界数据的不同形式,数据就划分为现实世界数据的不同形式,数据就划分为多种不同的类型。数据类型不同,能进行多种不同的类型。数据类型不同,能进行的运算不同,取值范围也不同,在计算机的运算不同,取值范围也不同,在计算机语言中还反映为数据的存储形式不同。语言中还反映为数据的存储形式不同。Java的每种数据类型占用固定的内存长度,的每种数据类
9、型占用固定的内存长度,与软硬件平台无关;每种数据类型均有一与软硬件平台无关;每种数据类型均有一个缺省的数值。个缺省的数值。基本类型基本类型基本类型基本类型数值类型数值类型数值类型数值类型整型(整型(整型(整型(bytebyte、shortshort、intint、longlong)实型(实型(实型(实型(floatdoublefloatdouble)字符型(字符型(字符型(字符型(charchar)布尔型(布尔型(布尔型(布尔型(booleanboolean)复合类型复合类型复合类型复合类型数组数组数组数组类(类(类(类(classclass)接口(接口(接口(接口(interfaceinte
10、rface)表表3-2Java语言的数据类型语言的数据类型3.2.1 常量与变量常量与变量程序中所处理的数据表现为两种形式:程序中所处理的数据表现为两种形式:常量和变量。常量和变量。1常量常量常量是在程序执行中不能变化的量。常量是在程序执行中不能变化的量。常量区分为不同的类型,如整型常量常量区分为不同的类型,如整型常量123,实型常量实型常量4.56,字符常量,字符常量a,布尔常量,布尔常量true和和false以及字符串常量以及字符串常量“Javaprogramming”。2变量变量为了在为了在为了在为了在JavaJava中存储一个数据,必须申请存储空间,中存储一个数据,必须申请存储空间,中
11、存储一个数据,必须申请存储空间,中存储一个数据,必须申请存储空间,变量就是这个存储空间的名字,在变量中可根据需要变量就是这个存储空间的名字,在变量中可根据需要变量就是这个存储空间的名字,在变量中可根据需要变量就是这个存储空间的名字,在变量中可根据需要存入不同的数据。尤其要指出的是,存入不同的数据。尤其要指出的是,存入不同的数据。尤其要指出的是,存入不同的数据。尤其要指出的是,JavaJava是属于强类是属于强类是属于强类是属于强类型的编程语言,这意味着对每一个变量都必须作类型型的编程语言,这意味着对每一个变量都必须作类型型的编程语言,这意味着对每一个变量都必须作类型型的编程语言,这意味着对每一
12、个变量都必须作类型声明。变量具有名称、类型、值和作用域等特性,在声明。变量具有名称、类型、值和作用域等特性,在声明。变量具有名称、类型、值和作用域等特性,在声明。变量具有名称、类型、值和作用域等特性,在使用一个变量前必须先定义。变量定义是用标识符为使用一个变量前必须先定义。变量定义是用标识符为使用一个变量前必须先定义。变量定义是用标识符为使用一个变量前必须先定义。变量定义是用标识符为变量命名,确定其数据类型,还可以根据需要为它赋变量命名,确定其数据类型,还可以根据需要为它赋变量命名,确定其数据类型,还可以根据需要为它赋变量命名,确定其数据类型,还可以根据需要为它赋初值(变量初始化)。定义了变量
13、即为变量指定了存初值(变量初始化)。定义了变量即为变量指定了存初值(变量初始化)。定义了变量即为变量指定了存初值(变量初始化)。定义了变量即为变量指定了存储方式。若是基本类型的变量,因为它们的存储长度储方式。若是基本类型的变量,因为它们的存储长度储方式。若是基本类型的变量,因为它们的存储长度储方式。若是基本类型的变量,因为它们的存储长度是固定的,如何分配存储单元就确定了。若是复合类是固定的,如何分配存储单元就确定了。若是复合类是固定的,如何分配存储单元就确定了。若是复合类是固定的,如何分配存储单元就确定了。若是复合类型的变量,定义后还需要用型的变量,定义后还需要用型的变量,定义后还需要用型的变
14、量,定义后还需要用newnew运算符为用户数据分配运算符为用户数据分配运算符为用户数据分配运算符为用户数据分配存储单元,复合类型变量中存储用户数据存储单元的存储单元,复合类型变量中存储用户数据存储单元的存储单元,复合类型变量中存储用户数据存储单元的存储单元,复合类型变量中存储用户数据存储单元的引用(指针)。引用(指针)。引用(指针)。引用(指针)。3.2.2 基本类型基本类型1整型常量整型常量Java的整型常量有的整型常量有3种形式:十进制、种形式:十进制、十六进制和八进制。十六进制和八进制。2整型变量整型变量整型变量按所占内存大小的不同有整型变量按所占内存大小的不同有byte、short、i
15、nt、long4种。种。Java的整数的整数都是有符号数。都是有符号数。类类类类 型型型型所占字节所占字节所占字节所占字节默认值默认值默认值默认值值值值值 范范范范 围围围围bytebyteshortshortintintlonglong1 12 24 48 80 00 00 00L0L12812812712732768327683276732767214748364821474836482147483647214748364792233728922337289223372792233727表表3-3整型数据类型整型数据类型3实型常量实型常量Java的实型常量有标准和科学计数法的实型常量有标准
16、和科学计数法两种表现形式。两种表现形式。标准形式。标准形式。科学计数法形式。科学计数法形式。4实型变量实型变量类类类类 型型型型所占字节所占字节所占字节所占字节默默默默 认认认认 值值值值值值值值 范范范范 围围围围floatfloatdoubledouble4 48 80.0f0.0f0.0d0.0d1.481707E-451.481707E-453.28864E383.28864E384.946544E-3244.946544E-324l.7976931348623157E308l.7976931348623157E308表表3-4实型数据类型实型数据类型5字符型数据字符型数据字符型字符型
17、char数据是由一对单引号括起数据是由一对单引号括起来的单个字符。来的单个字符。转转转转 义义义义 字字字字 符符符符描描描描述述述述ddddddl l到到到到3 3位位位位8 8进制数据所表示的字符(进制数据所表示的字符(进制数据所表示的字符(进制数据所表示的字符(dddddd)uxxxxuxxxxl l到到到到4 4位位位位1616进制数所表示的字符(进制数所表示的字符(进制数所表示的字符(进制数所表示的字符(xxxxxxxx) 单引号字符(单引号字符(单引号字符(单引号字符(u0027u0027)双引号字符(双引号字符(双引号字符(双引号字符(u0022u0022) 反斜杠字符(反斜杠字
18、符(反斜杠字符(反斜杠字符(u005Cu005C)r r回车(回车(回车(回车(u000Du000D)nn换行(换行(换行(换行(u000Au000A)f f走纸换页(走纸换页(走纸换页(走纸换页(u000Cu000C)t t横向跳格(横向跳格(横向跳格(横向跳格(n0009n0009)bb退格(退格(退格(退格(u0008u0008)表表3-5转义字符表转义字符表6布尔型数据布尔型数据布尔布尔boolean类型是最简单的一种数据类型是最简单的一种数据类型,布尔数据只有两个值:类型,布尔数据只有两个值:true和和false,且都是保留字,分别表示,且都是保留字,分别表示“真真”和和“假假”两
19、种状态。关系运算和逻辑运算返回布两种状态。关系运算和逻辑运算返回布尔类型的值。尔类型的值。布尔型是一个独立的类型,它不像布尔型是一个独立的类型,它不像C语言中的布尔型代表语言中的布尔型代表0和和1两个整数,由于两个整数,由于这个原因,这个原因,Java中的布尔类型不能转换成中的布尔类型不能转换成数字。数字。7字符串数据字符串数据字符串常量是用双引号括起来的零个字符串常量是用双引号括起来的零个或多个字符(包括转义字符)。或多个字符(包括转义字符)。3.3运运算算符符运算符的作用是与一定的运算数据组成表运算符的作用是与一定的运算数据组成表运算符的作用是与一定的运算数据组成表运算符的作用是与一定的运
20、算数据组成表达式来完成相应的运算。对不同的数据类型,有达式来完成相应的运算。对不同的数据类型,有达式来完成相应的运算。对不同的数据类型,有达式来完成相应的运算。对不同的数据类型,有着不同的运算符。对运算符,有运算对象(操作着不同的运算符。对运算符,有运算对象(操作着不同的运算符。对运算符,有运算对象(操作着不同的运算符。对运算符,有运算对象(操作数)个数及类型、运算优先级、结合性等特性。数)个数及类型、运算优先级、结合性等特性。数)个数及类型、运算优先级、结合性等特性。数)个数及类型、运算优先级、结合性等特性。JavaJava语言对运算符的优先级、结合性和求语言对运算符的优先级、结合性和求语言
21、对运算符的优先级、结合性和求语言对运算符的优先级、结合性和求值顺序有明确的规定,从根本上消除了运算符运值顺序有明确的规定,从根本上消除了运算符运值顺序有明确的规定,从根本上消除了运算符运值顺序有明确的规定,从根本上消除了运算符运算过程的二义性以及结果不统一的弊端。算过程的二义性以及结果不统一的弊端。算过程的二义性以及结果不统一的弊端。算过程的二义性以及结果不统一的弊端。运算符的优先级是指不同运算符在运运算符的优先级是指不同运算符在运算中执行的先后顺序。在算中执行的先后顺序。在Java语言中共有语言中共有17种优先级,每个运算符分属确定的一个种优先级,每个运算符分属确定的一个优先级别。优先级别。
22、Java语言严格按照运算符的优语言严格按照运算符的优先级由高到低地顺序执行各种运算。先级由高到低地顺序执行各种运算。运算符的结合性确定同级运算符的运运算符的结合性确定同级运算符的运算顺序。左结合性规定,运算数据先与左算顺序。左结合性规定,运算数据先与左边的运算符结合,然后与右边的运算符结边的运算符结合,然后与右边的运算符结合。右结合性正好相反。合。右结合性正好相反。3.3.1 算术运算符算术运算符算术运算符按操作数的多少可分为一算术运算符按操作数的多少可分为一元(或称单目)和二元(或称双目)两类,元(或称单目)和二元(或称双目)两类,一元运算符一次对一个操作数进行操作,一元运算符一次对一个操作
23、数进行操作,二元运算符一次对两个操作数进行操作。二元运算符一次对两个操作数进行操作。算术运算符的操作数类型是数值类型。算术运算符的操作数类型是数值类型。1一元算术运算符一元算术运算符运运运运 算算算算 符符符符实际操作实际操作实际操作实际操作例例例例子子子子功功功功能能能能+ + +正值正值正值正值负号负号负号负号加加加加1 1减减减减1 1+x+xxxx+x+,+x+xxx,xx对对对对x x取负取负取负取负将将将将x x的值加的值加的值加的值加1 1后再放回变量后再放回变量后再放回变量后再放回变量x x将将将将x x的值减的值减的值减的值减1 1后再放回变量后再放回变量后再放回变量后再放回
24、变量x x表表3-6一元算术运算符一元算术运算符2二元算术运算符二元算术运算符算术运算符的第二种类型是二元运算算术运算符的第二种类型是二元运算符,这种运算符并不改变操作数的值,而符,这种运算符并不改变操作数的值,而是返回一个必须赋给变量的值。表是返回一个必须赋给变量的值。表3-7列出列出了二元算术运算符。二元算术运算符具有了二元算术运算符。二元算术运算符具有左结合性。左结合性。运运运运 算算算算 符符符符实际操作实际操作实际操作实际操作例例例例子子子子功功功功能能能能+ + * */ /%加运算加运算加运算加运算减运算减运算减运算减运算乘运算乘运算乘运算乘运算除运算除运算除运算除运算取模运算取
25、模运算取模运算取模运算a+ba+bababa*ba*ba/ba/ba%ba%b求求求求a a与与与与b b相加的和相加的和相加的和相加的和求求求求a a与与与与b b相减的差相减的差相减的差相减的差求求求求a a与与与与b b相乘的积相乘的积相乘的积相乘的积求求求求a a除以除以除以除以b b的商的商的商的商求求求求a a除以除以除以除以b b的余数的余数的余数的余数表表3-7二元算术运算符二元算术运算符这些都是常用的运算,对二元算术运这些都是常用的运算,对二元算术运算符,有以下两点要注意。算符,有以下两点要注意。两个整数运算的结果是整数,两个整数运算的结果是整数,5/2结结果是果是2而不是而
26、不是2.5。取模运算是求两个数相除的余数,取模运算是求两个数相除的余数,如如17%3的结果是的结果是2。可以对实数求余数。实。可以对实数求余数。实数数a%b的结果为的结果为a(int)(a/b)*b,余数的符号,余数的符号与被除数与被除数a相同。如相同。如123.4%10的结果为的结果为3.4。3.3.2 关系运算符关系运算符关系运算符用于确定一个数据与另一关系运算符用于确定一个数据与另一个数据之间的关系,即进行关系运算。所个数据之间的关系,即进行关系运算。所谓关系运算是比较运算,将两个值进行比谓关系运算是比较运算,将两个值进行比较。关系运算的结果值为较。关系运算的结果值为true或或fals
27、e(布(布尔型)。表尔型)。表3-8列出了列出了Java语言提供的语言提供的6种种关系运算符,它们都是双目运算符。关系运算符,它们都是双目运算符。在这里要指出的是,等于运算符在这里要指出的是,等于运算符=不不要与赋值运算符要与赋值运算符=混淆,以至于关系运算变混淆,以至于关系运算变成了赋值运算。成了赋值运算。运运运运 算算算算 符符符符实际操作实际操作实际操作实际操作例例例例子子子子 =!=!=小于小于小于小于大于大于大于大于小于或等于小于或等于小于或等于小于或等于大于或等于大于或等于大于或等于大于或等于等于等于等于等于不等于不等于不等于不等于abababa=ba=ba=ba=ba=ba!=b
28、a!=b表表3-8关系运算符关系运算符3.3.3 逻辑运算符逻辑运算符逻辑运算符可以对布尔类型的数据逻辑运算符可以对布尔类型的数据(布尔常量、布尔变量、关系表达式和逻(布尔常量、布尔变量、关系表达式和逻辑表达式等)进行运算,结果也为布尔类辑表达式等)进行运算,结果也为布尔类型。表型。表3-9列出了列出了Java语言的逻辑运算符,语言的逻辑运算符,逻辑运算规则如表逻辑运算规则如表3-10所示。所示。运运运运 算算算算 符符符符名名名名称称称称例例例例子子子子功功功功能能能能! !非非非非!a!a对布尔数据对布尔数据对布尔数据对布尔数据a a取非取非取非取非&非简洁与非简洁与非简洁与非简洁与a&b
29、a&b对布尔数据对布尔数据对布尔数据对布尔数据a a和和和和b b进行非简洁与运算进行非简洁与运算进行非简洁与运算进行非简洁与运算| |非简洁或非简洁或非简洁或非简洁或a|ba|b对布尔数据对布尔数据对布尔数据对布尔数据a a和和和和b b进行非简洁或运算进行非简洁或运算进行非简洁或运算进行非简洁或运算 异或异或异或异或abab对布尔数据对布尔数据对布尔数据对布尔数据a a和和和和b b进行异或运算进行异或运算进行异或运算进行异或运算&简洁与简洁与简洁与简洁与a&ba&b对布尔数据对布尔数据对布尔数据对布尔数据a a和和和和b b进行简洁与运算进行简洁与运算进行简洁与运算进行简洁与运算| |简
30、洁或简洁或简洁或简洁或a|ba|b对布尔数据对布尔数据对布尔数据对布尔数据a a和和和和b b进行简洁或运算进行简洁或运算进行简洁或运算进行简洁或运算表表3-9布尔运算符布尔运算符a ab b!a aa&ba&ba&ba&ba|ba|ba|ba|bababfalsefalsefalsefalsetruetruefalsefalseflseflsefalsefalsefalsefalsetruetruetruetruefalsefalsetruetruetruetruetruetruefalsefalsefalsefalsefalsefalsetruetruetruetruetruetruetr
31、uetruefalsefalsetruetruetruetruefalsefalse表表3-10逻辑运算真值表逻辑运算真值表3.3.4 位运算符位运算符位运算符用来对二进制位进行运算,位运算符用来对二进制位进行运算,运算操作数应是整数类型,结果也是整数运算操作数应是整数类型,结果也是整数类型。表类型。表3-11列出了列出了Java的位运算符。的位运算符。运运运运 算算算算 符符符符实际操作实际操作实际操作实际操作例例例例子子子子功功功功能能能能 按位取反按位取反按位取反按位取反aa对对对对a a按二进制每位取反按二进制每位取反按二进制每位取反按二进制每位取反| | 与运算与运算与运算与运算或运
32、算或运算或运算或运算异或运算异或运算异或运算异或运算左移左移左移左移算术右移算术右移算术右移算术右移逻辑右移逻辑右移逻辑右移逻辑右移a ab ba|ha|hababababababab对对对对a a和和和和b b按二进制位每位进行与运算按二进制位每位进行与运算按二进制位每位进行与运算按二进制位每位进行与运算对对对对a a和和和和b b按二进制位每位进行或运算按二进制位每位进行或运算按二进制位每位进行或运算按二进制位每位进行或运算对对对对a a和和和和b b按二进制位每位进行异或运算按二进制位每位进行异或运算按二进制位每位进行异或运算按二进制位每位进行异或运算对对对对a a左移左移左移左移b b
33、位,低位用位,低位用位,低位用位,低位用0 0填充填充填充填充对对对对a a右移右移右移右移b b位,高位用原高位重复位,高位用原高位重复位,高位用原高位重复位,高位用原高位重复对对对对a a右移右移右移右移b b位,高位用位,高位用位,高位用位,高位用0 0填充填充填充填充表表3-11位运算符列表位运算符列表a ab baaa&ba&ba|ba|babab0 00 01 10 00 00 00 01 11 10 01 11 11 10 00 00 01 11 11 11 10 01 11 10 0表表3-12位运算真值表位运算真值表3.3.5 赋值运算符赋值运算符赋值运算符都是二元运算符,具
34、有右结赋值运算符都是二元运算符,具有右结合性。合性。1简单赋值运算符(简单赋值运算符(=)2复合赋值运算符复合赋值运算符复合赋值运算符的右边是一个整体。复合赋值运算符的右边是一个整体。表表3-13中的等价是有条件的,即中的等价是有条件的,即op1仅计算仅计算1次。次。运运运运 算算算算 符符符符用用用用法法法法等等等等 价价价价 于于于于+=+=-=-=*=*=/=/=%=%=op1+=op2op1+=op2op1=op2op1=op2op1*=op2op1*=op2op1/=op2op1/=op2op1%=op2op1%=op2op1=op1+op2op1=op1+op2op1=op1op2
35、op1=op1op2op1=op1*op2op1=op1*op2op1=op1/op2op1=op1/op2op1=op1%op2op1=op1%op2&=&=op1&=op2op1&=op2op1=op2op1=op2op1=op2op1=op2op1=op2op1=op2op1=op2op1=op2op1=op2op1=op1&op2op1=op1&op2op1=op1op2op1=op1op2op1=op1op2op1=op1op2op1=op1op2op1=op1op2op1=op1op2op1=op1op2op1=op1op2表表3-13复合赋位运算符复合赋位运算符3.3.6 条件运
36、算符条件运算符条件运算符是一种三元运算符,它的格条件运算符是一种三元运算符,它的格式如下:式如下:Operand?Expression1:Expression2在这个式子中,先计算在这个式子中,先计算Operand的真假,的真假,若为真,则计算并返回若为真,则计算并返回Expression1,若为假,若为假,则计算并返回则计算并返回Expression2。例如;。例如;(ab)?a:b;这个表达式将返回这个表达式将返回a和和b中较大的那个数值。中较大的那个数值。3.3.7 字符串运算符字符串运算符运算符运算符“+”可以实现两个或多个字可以实现两个或多个字符串的连接,也可实现字符串与其他类对符串
37、的连接,也可实现字符串与其他类对象的连接,在连接时,其他类对象会被转象的连接,在连接时,其他类对象会被转换成字符串。另外,运算符换成字符串。另外,运算符“+=”把两个把两个字符串连接的结果放进第一个字符串里。字符串连接的结果放进第一个字符串里。在前面的例子里,当想把几项输出内容输在前面的例子里,当想把几项输出内容输出在同一行里时使用的就是出在同一行里时使用的就是“+”运算符。运算符。3.4常用常用Java数值计算方法数值计算方法在在Java的类的类Math中包含了一些数值常中包含了一些数值常量,如量,如E和和PI,以及一些基本的数值计算方,以及一些基本的数值计算方法,如指数、对数、平方根和三角
38、函数等,法,如指数、对数、平方根和三角函数等,为用户程序进行数值计算带来了方便。表为用户程序进行数值计算带来了方便。表3-14列出了一些常用的数值计算方法。列出了一些常用的数值计算方法。方方方方法法法法功功功功能能能能参数类型参数类型参数类型参数类型返回类型返回类型返回类型返回类型abs(a)abs(a)求求求求a a的绝对值的绝对值的绝对值的绝对值(l l)(1 1)sin(a)sin(a)求求求求a(a(弧度弧度弧度弧度) )的正弦值的正弦值的正弦值的正弦值doubledoubledoubledoublecos(a)cos(a)求求求求a(a(弧度弧度弧度弧度) )的余弦值的余弦值的余弦值
39、的余弦值doubledoubledoubledoubletan(a)tan(a)求求求求a(a(弧度弧度弧度弧度) )的正切值的正切值的正切值的正切值doubledoubledoubledoubleasin(a)asin(a)求求求求a a的反正弦值的反正弦值的反正弦值的反正弦值doubledoubledoubledouble表表3-14类类Math中常用的数值计算方法中常用的数值计算方法方方方方法法法法功功功功能能能能参数类型参数类型参数类型参数类型返回类型返回类型返回类型返回类型acos(a)acos(a)求求求求a a的反余弦值的反余弦值的反余弦值的反余弦值doubledoubledou
40、bledoubleatan(a)atan(a)求求求求a a的反正切值的反正切值的反正切值的反正切值doubledoubledoubledoubleceil(a)ceil(a)求不小于求不小于求不小于求不小于a a的最小整数的最小整数的最小整数的最小整数doubledoubledoubledoublerint(a)rint(a)求最接近求最接近求最接近求最接近a a的整数的整数的整数的整数doubledoubledoubledoubleexp(a)exp(a)求求求求e e的的的的a a幂次幂次幂次幂次doubledoubledoubledoublefloor(a)floor(a)求不大于求不
41、大于求不大于求不大于a a的最大整数的最大整数的最大整数的最大整数doubledoubledoubledoublepow(apow(a,b)b)求求求求a a的的的的b b次方次方次方次方doubledoubledoubledoublerandom()random()产生产生产生产生0.00.01.01.0的伪随机数的伪随机数的伪随机数的伪随机数doubledoubledoubledoublesqrt(a)sqrt(a)求求求求a a的平方根的平方根的平方根的平方根doubledoubledoubledoublelog(a)log(a)求求求求a a的自然对数的自然对数的自然对数的自然对数do
42、ubledoubledoubledoublemax(amax(a,b)b)求求求求a a,b b中的大者中的大者中的大者中的大者(l l)(1 1)min(amin(a,b)b)求求求求a a,b b中的小者中的小者中的小者中的小者(l l)(1 1)续表续表3.5表表达达式式表达式是由操作数和运算符按一定的表达式是由操作数和运算符按一定的语法形式组成的符号序列。语法形式组成的符号序列。3.5.1 类型转换类型转换在一个表达式中可能有不同类型的数在一个表达式中可能有不同类型的数据进行混合运算,这是允许的,但在运算据进行混合运算,这是允许的,但在运算时,时,Java将不同类型的数据转换成相同类将
43、不同类型的数据转换成相同类型,再进行运算。型,再进行运算。1自动类型转换自动类型转换类类类类 型型型型 1 1类类类类 型型型型 2 2转换后的类型转换后的类型转换后的类型转换后的类型bytebyte或或或或shortshortbytebyte或或或或shortshort或或或或intintbytebyte或或或或shortshort或或或或intint或或或或longlongbytebyte或或或或shortshort或或或或intint或或或或longlong或或或或floatfloatcharcharintintlonglongfloatfloatdoubledoubleintintin
44、tintlonglongfloatfloatdoubledoubleintint表表3-15不同类型数据之间的转换规则不同类型数据之间的转换规则2强制类型转换强制类型转换源源源源 类类类类 型型型型目标类型目标类型目标类型目标类型bytebyteshortshortcharcharintintlonglongfloatfloatshortshort,charchar,intint,longlong,floatfloat,doubledoubleintint,longlong,floatfloat,doubledoubleintint,longlong,floatfloat,doubledoub
45、lelonglong,floatfloat,doubledoublefloatfloat,doubledoubledoubledouble表表3-16不会丢失信息的类型转换不会丢失信息的类型转换3表达式求值中的自动类型提升表达式求值中的自动类型提升JavaJava语言对表达式求值的自动类型提升规则如语言对表达式求值的自动类型提升规则如语言对表达式求值的自动类型提升规则如语言对表达式求值的自动类型提升规则如下。下。下。下。 所有所有所有所有bytebyte和和和和shortshort类型提升为类型提升为类型提升为类型提升为intint类型。类型。类型。类型。 若一个操作数是若一个操作数是若一个操
46、作数是若一个操作数是longlong类型,则整个表达式提升为类型,则整个表达式提升为类型,则整个表达式提升为类型,则整个表达式提升为longlong类型。类型。类型。类型。 若一个操作数是若一个操作数是若一个操作数是若一个操作数是floatfloat类型,则整个表达式提升为类型,则整个表达式提升为类型,则整个表达式提升为类型,则整个表达式提升为floatfloat类型。类型。类型。类型。 若有若有若有若有doubledouble类型,则表达式值为类型,则表达式值为类型,则表达式值为类型,则表达式值为doubledouble类型。类型。类型。类型。自动类型提升对数据的运算带来了方便,但也容易自动
47、类型提升对数据的运算带来了方便,但也容易自动类型提升对数据的运算带来了方便,但也容易自动类型提升对数据的运算带来了方便,但也容易引起编译错误。引起编译错误。引起编译错误。引起编译错误。3.5.2 优先级优先级优优优优 先先先先 次次次次 序序序序运运运运 算算算算 符符符符1 12 23 34 45 56 67 7()()()()+-!instanceof+-!instanceofnewnew,(,(,(,(typetype)即强制类型转换)即强制类型转换)即强制类型转换)即强制类型转换*/%/%+=8 89 9101011111212131314141515=!=!=&按位与和非简洁与按位与
48、和非简洁与按位与和非简洁与按位与和非简洁与 按位或和非简洁或按位或和非简洁或按位或和非简洁或按位或和非简洁或& ?:?:=+=*=/=%=+=*=/=%=&=&=表表3-17运算符优先级运算符优先级3.6包包装装类类基基基基 本本本本 类类类类 型型型型包包包包 装装装装 类类类类基基基基 本本本本 类类类类 型型型型包包包包 装装装装 类类类类bytebyteshortshortintintlonglongcharcharByteByteShortShortIntegerIntegerLongLongCharacterCharacterfloatfloatdoubledoubleboolea
49、nbooleanvoidvoidFloatFloatDoubleDoubleBooleanBooleanVoidVoid表表3-18基本类型与包装类基本类型与包装类3.7输入输出初步输入输出初步3.7.1 输出输出inti=10,j=20;inti=10,j=20;System.out.println(i=+i+System.out.println(i=+i+,j=+j);/j=+j);/输出为输出为输出为输出为i=10i=10,j=20j=20System.out.println(i+j);/System.out.println(i+j);/输出为输出为输出为输出为3030System.ou
50、t.println(sum=+i+j);/System.out.println(sum=+i+j);/输出为输出为输出为输出为sum=1020sum=1020System.out.println(sum=+(i+j);/System.out.println(sum=+(i+j);/输出为输出为输出为输出为sum=30sum=303.7.2 输入输入在在Java中,未提供与中,未提供与System.out.print()对对应的输入方法,仅有一个应的输入方法,仅有一个System.in.read(),可,可用于从键盘输入整数值在用于从键盘输入整数值在0255之间的之间的int类型类型数据。若程序
51、运行时需要从键盘输入其他类型数据。若程序运行时需要从键盘输入其他类型的数据,则需要使用的数据,则需要使用Java提供的输入输出功能。提供的输入输出功能。不论从键盘输入何种类型的数据,不论从键盘输入何种类型的数据,Java从键盘从键盘接收数据都是以字符串的形式进行,再根据实接收数据都是以字符串的形式进行,再根据实际数据的需要进行类型转换。际数据的需要进行类型转换。在在Java中实现输入时要使用异常处理机制,中实现输入时要使用异常处理机制,这是这是Java特有的部分内容特有的部分内容3.8流流程程控控制制3.8.1 语句和块语句和块1语句语句在在Java语言中,有下面几类语句:空语言中,有下面几类
52、语句:空语句、标识语句、声明语句、表达式语句、语句、标识语句、声明语句、表达式语句、分支语句、循环语句、跳转语句、同步语分支语句、循环语句、跳转语句、同步语句和异常语句等。有两种基本的语句:表句和异常语句等。有两种基本的语句:表达式语句和声明语句。达式语句和声明语句。(1)表达式语句)表达式语句赋值表达式,包含赋值运算符赋值表达式,包含赋值运算符=或复合赋或复合赋值运算符之一。值运算符之一。+或或的前后缀形式。的前后缀形式。方法调用(无论它是否有返回值)。方法调用(无论它是否有返回值)。对象创建表达式,用对象创建表达式,用new来创建一个对象来创建一个对象的表达式。的表达式。(2)声明语句)声
53、明语句2块块用一对花括号用一对花括号“”将零个或多个语句将零个或多个语句括起来,就构成一个块(也称复合语句)。括起来,就构成一个块(也称复合语句)。在块中允许包含另一个块(块嵌套)。在在块中允许包含另一个块(块嵌套)。在Java语言中,允许一个块出现在任何单一语语言中,允许一个块出现在任何单一语句可以出现的地方。句可以出现的地方。块体现了块体现了Java面向对象程序设计的封装面向对象程序设计的封装概念,在一个块中声明的局部变量的作用域概念,在一个块中声明的局部变量的作用域是该变量的声明开始点到最小的包含其声明是该变量的声明开始点到最小的包含其声明的块结束。的块结束。3.8.2 if-else分
54、支语句分支语句1用单个用单个if语句实现单选、双选结构语句实现单选、双选结构2用多个用多个if语句实现多选结构语句实现多选结构(1)if语句并列语句并列(2)if语句嵌套语句嵌套在用在用if嵌套方法进行多分支程序设计时,嵌套方法进行多分支程序设计时,将将if语句嵌套在语句嵌套在else部分。部分。若需要在若需要在if-else语句的语句的statement1部分嵌套部分嵌套if语句,则将内层的语句,则将内层的if语句用括号括起来,指语句用括号括起来,指明正确的明正确的if与与else的配对组合。的配对组合。3.8.3 switch语句语句使用使用使用使用switchswitch语句时,需要注意
55、的是:语句时,需要注意的是:语句时,需要注意的是:语句时,需要注意的是: 各个各个各个各个casecase后的常量值后的常量值后的常量值后的常量值valuevalue应各不相同。应各不相同。应各不相同。应各不相同。 通常在每一种通常在每一种通常在每一种通常在每一种casecase情况后都应使用情况后都应使用情况后都应使用情况后都应使用breakbreak语句,否则,语句,否则,语句,否则,语句,否则,遇到第一个相等情况后,下面遇到第一个相等情况后,下面遇到第一个相等情况后,下面遇到第一个相等情况后,下面breakbreak前的所有语句都会前的所有语句都会前的所有语句都会前的所有语句都会被执行(
56、包括被执行(包括被执行(包括被执行(包括defaultdefault后面的语句,若有的话)。后面的语句,若有的话)。后面的语句,若有的话)。后面的语句,若有的话)。 各个分支的各个分支的各个分支的各个分支的statementstatement可以是一条或多条语句,不必可以是一条或多条语句,不必可以是一条或多条语句,不必可以是一条或多条语句,不必使用复合语句。使用复合语句。使用复合语句。使用复合语句。 不同不同不同不同casecase后的语句后的语句后的语句后的语句statementstatement相同时,可以合并多个相同时,可以合并多个相同时,可以合并多个相同时,可以合并多个casecase
57、子句。子句。子句。子句。switchswitch语句在用表达式的值比较每一个语句在用表达式的值比较每一个语句在用表达式的值比较每一个语句在用表达式的值比较每一个casecase后的值后的值后的值后的值valuevalue时,是从前往后顺序进行的。若各个值时,是从前往后顺序进行的。若各个值时,是从前往后顺序进行的。若各个值时,是从前往后顺序进行的。若各个值valuevalue互不互不互不互不相同,则相同,则相同,则相同,则casecase子句的顺序可任意。子句的顺序可任意。子句的顺序可任意。子句的顺序可任意。3.8.4 循环语句循环语句一个循环一般包括一个循环一般包括一个循环一般包括一个循环一般
58、包括4 4个部分:个部分:个部分:个部分: 初始化部分,用来设置循环的一些初始条件,如累初始化部分,用来设置循环的一些初始条件,如累初始化部分,用来设置循环的一些初始条件,如累初始化部分,用来设置循环的一些初始条件,如累加器清零等;加器清零等;加器清零等;加器清零等; 循环体部分,重复执行的一段程序,可以是一条语循环体部分,重复执行的一段程序,可以是一条语循环体部分,重复执行的一段程序,可以是一条语循环体部分,重复执行的一段程序,可以是一条语句,也可以是一块语句;句,也可以是一块语句;句,也可以是一块语句;句,也可以是一块语句; 循环条件变更部分,在本次循环结束,下一次循环循环条件变更部分,在
59、本次循环结束,下一次循环循环条件变更部分,在本次循环结束,下一次循环循环条件变更部分,在本次循环结束,下一次循环开始前执行的语句。常用形式为一个计数器值的增减;开始前执行的语句。常用形式为一个计数器值的增减;开始前执行的语句。常用形式为一个计数器值的增减;开始前执行的语句。常用形式为一个计数器值的增减; 终止部分,一般为布尔表达式,每一次循环都要对终止部分,一般为布尔表达式,每一次循环都要对终止部分,一般为布尔表达式,每一次循环都要对终止部分,一般为布尔表达式,每一次循环都要对该表达式求值,以检查是否满足循环终止条件。该表达式求值,以检查是否满足循环终止条件。该表达式求值,以检查是否满足循环终
60、止条件。该表达式求值,以检查是否满足循环终止条件。1while语句语句JavaJava执行执行执行执行whilewhile循环语句时,可以分解为以下步骤:循环语句时,可以分解为以下步骤:循环语句时,可以分解为以下步骤:循环语句时,可以分解为以下步骤: 计算表达式计算表达式计算表达式计算表达式boolean-expressionboolean-expression(循环条件);(循环条件);(循环条件);(循环条件); 检查检查检查检查boolean-expressionboolean-expression的值,如果值为的值,如果值为的值,如果值为的值,如果值为truetrue,则执,则执,则执
61、,则执行行行行,否则执行,否则执行,否则执行,否则执行; 执行给定语句执行给定语句执行给定语句执行给定语句statementstatement,即执行即循环体,其中应,即执行即循环体,其中应,即执行即循环体,其中应,即执行即循环体,其中应该包含对循环条件有影响的语句,使得循环条件会发该包含对循环条件有影响的语句,使得循环条件会发该包含对循环条件有影响的语句,使得循环条件会发该包含对循环条件有影响的语句,使得循环条件会发生相应变换;生相应变换;生相应变换;生相应变换; 转移到转移到转移到转移到执行;执行;执行;执行; 循环结束。循环结束。循环结束。循环结束。2do-while语句语句do循环语句
62、的执行过程:循环语句的执行过程:执行给定语句执行给定语句statement,即执行即循环体,即执行即循环体,其中应该包含对循环条件有影响的语句,使其中应该包含对循环条件有影响的语句,使得循环条件会发生相应变换;得循环条件会发生相应变换;计算表达式计算表达式boolean-expression(循环条件)(循环条件);检查检查boolean-expression的值,如果值为的值,如果值为true,则执行,则执行,否则执行,否则执行;循环结束。循环结束。3for语句语句forfor语句执行步骤:语句执行步骤:语句执行步骤:语句执行步骤: 计算表达式计算表达式计算表达式计算表达式expressio
63、n1expression1(只计算一次,默认时表示(只计算一次,默认时表示(只计算一次,默认时表示(只计算一次,默认时表示无初始内容);无初始内容);无初始内容);无初始内容); 接着检查表达式接着检查表达式接着检查表达式接着检查表达式expression2expression2的值,如果值为的值,如果值为的值,如果值为的值,如果值为truetrue,转向转向转向转向执行,如果值为执行,如果值为执行,如果值为执行,如果值为falsefalse,则转到,则转到,则转到,则转到执行;执行;执行;执行; 执行语句执行语句执行语句执行语句statementstatement,即执行循环体部分,由于,即
64、执行循环体部分,由于,即执行循环体部分,由于,即执行循环体部分,由于forfor语语语语句有句有句有句有expression3expression3,因此在循环体中不需要安排对循环,因此在循环体中不需要安排对循环,因此在循环体中不需要安排对循环,因此在循环体中不需要安排对循环条件有影响的语句;条件有影响的语句;条件有影响的语句;条件有影响的语句; 执行执行执行执行expression3expression3,转到,转到,转到,转到执行;执行;执行;执行; 循环结束。循环结束。循环结束。循环结束。省略表达式省略表达式expression1在表达式在表达式expression1中包含变量定义等更多
65、中包含变量定义等更多的内容的内容省略表达式省略表达式expression3在表达式在表达式expression3中包含更多内容中包含更多内容同时省略表达式同时省略表达式expression1和表达式和表达式expression3同时省略所有表达式同时省略所有表达式expression4循环嵌套循环嵌套循环嵌套是指在某个循环语句的循环循环嵌套是指在某个循环语句的循环体中又包含另一个循环语句,也称多重循体中又包含另一个循环语句,也称多重循环。外面的循环语句称为环。外面的循环语句称为“外层循环外层循环”,外层循环的循环体中的循环称为外层循环的循环体中的循环称为“内层循内层循环环”。3.8.5 标号和
66、其他流程控制语句标号和其他流程控制语句1标号标号标号是一个标识符,用于给某语句或标号是一个标识符,用于给某语句或程序块的首地址取一个名字。程序块的首地址取一个名字。2break语句语句3continue语句语句3.9数组和字符串数组和字符串数组是可以通过下标定位的同类型数数组是可以通过下标定位的同类型数据的集合。它是程序设计过程中常用的数据的集合。它是程序设计过程中常用的数据结构。数组中的每个数据称为元素,相据结构。数组中的每个数据称为元素,相同数据类型的元素按照一定顺序线性排列同数据类型的元素按照一定顺序线性排列就构成了数组。就构成了数组。1数组元素类型数组元素类型Java的引用类型可以是以
67、下两种数组元素类的引用类型可以是以下两种数组元素类型:型:(1)数组元素可以是接口类型,它的值)数组元素可以是接口类型,它的值是空引用或任何实现了该接口的类型的实是空引用或任何实现了该接口的类型的实例。例。(2)数组元素可以是抽象类类型,它的)数组元素可以是抽象类类型,它的值是空引用或该抽象类的非抽象子类的实值是空引用或该抽象类的非抽象子类的实例。例。2数组类型数组类型在在Java中,数组类型是通过指定数组的元中,数组类型是通过指定数组的元素类型和数组维数来定义的,用数组元素类型素类型和数组维数来定义的,用数组元素类型名后面跟一对或多对方括号名后面跟一对或多对方括号来表示。来表示。3数组维数数
68、组维数数组可以是一维也可以是多维数组。维数数组可以是一维也可以是多维数组。维数对应于用来识别每个数组元素的下标个数。对应于用来识别每个数组元素的下标个数。在在数组类型中的方括号数组类型中的方括号的数目表示数组的维数。的数目表示数组的维数。4数组长度数组长度数组的每一维都有长度,即数组的每数组的每一维都有长度,即数组的每一维所包含的元素个数。一维所包含的元素个数。Java允许数组的允许数组的元素个数为零,此时称数组为空。在元素个数为零,此时称数组为空。在Java中,数组的长度不是数组类型的一部分,中,数组的长度不是数组类型的一部分,因此,数组的长度必须在为数组分配内存因此,数组的长度必须在为数组
69、分配内存空间时指定。空间时指定。3.9.2 数组的声明与使用数组的声明与使用1声明数组声明数组2创建数组空间创建数组空间3创建数组元素和初始化创建数组元素和初始化(1)数组的类型是基本数据类型时,数)数组的类型是基本数据类型时,数组元素的创建和初始化。组元素的创建和初始化。(2)数组的类型是引用类型时,数组元)数组的类型是引用类型时,数组元素的创建和初始化。素的创建和初始化。4数组的使用数组的使用(1)访问数组)访问数组(2)数组的应用举例)数组的应用举例3.9.3 多维数组多维数组1多维数组的声明多维数组的声明2多维数组的创建多维数组的创建(1)直接为数组的每一维分配空间)直接为数组的每一维
70、分配空间(2)从数组的第一维开始,依次为每一)从数组的第一维开始,依次为每一维分配空间维分配空间(3)多维数组的使用。)多维数组的使用。3多维数组的初始化多维数组的初始化(1)直接为数组的每个元素赋值)直接为数组的每个元素赋值(2)在声明数组的同时进行初始化)在声明数组的同时进行初始化(3)非基本数据类型多维数组的初始化。)非基本数据类型多维数组的初始化。3.9.4 数组操作的常用方法数组操作的常用方法1获得数组长度的操作获得数组长度的操作可以使用两种方法获得数组的元素个数:可以使用两种方法获得数组的元素个数:(1)数组的)数组的length属性,属性,如下所示:如下所示:数组名数组名.len
71、gth(2)利用)利用Array类的静态方法类的静态方法getLength,它的原型如下:它的原型如下:publicstaticintgetLength(Objectarray)2数组的复制操作数组的复制操作使用使用arraycopy时要注意几个方面:时要注意几个方面:(1)复制超出了源或目的数组的下标范围会)复制超出了源或目的数组的下标范围会产生产生IndexOutOfBoundsException的异常;的异常;(2)源与目的数组的元素类型不一致会产生)源与目的数组的元素类型不一致会产生ArrayStoreException的异常;的异常;(3)源或目的数组为)源或目的数组为null会产生
72、会产生NullPointerException。3使用使用Arrays类对数组进行操作类对数组进行操作(1)数组的排序操作)数组的排序操作sort方法的主要形式有两种:方法的主要形式有两种:publicstaticvoidsort(数组)(数组)publicstaticvoidsort(数组,起始下标,(数组,起始下标,结束下标)结束下标)(2)数组的查找操作)数组的查找操作(3)数组的填充操作)数组的填充操作publicstaticvoidfill(数组,数组,value)publicstaticvoidfill(数组,起始下标,结束数组,起始下标,结束下标,下标,value)(4)判断数组是否相同的操作)判断数组是否相同的操作