购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第2章
Java语言

视频讲解:2小时18分钟)

本章概览

想要熟练掌握一门编程语言,最好的方法就是充分了解、掌握基础知识,并亲自体验。

本章不仅对Java中的变量、常量、基本数据类型、运算符等基础内容进行了详细讲解,还介绍了编写Java程序时应遵循的代码编写规范。在讲解的过程中,用丰富多样的实例让读者体验知识点的运用,带领读者逐步走进Java编程世界。每个实例之后都设置了两个练习题目,让读者亲自动手,在练习中收获编程的乐趣。

本章内容也是Java Web技术和Android技术的基础知识。

知识框架

2.1 代码注释

视频讲解:资源包\Video\02\2.1代码注释.mp4

在代码中添加注释能提高代码的可读性。注释中包含了程序的信息,可以帮助程序员更好地阅读和理解程序。在Java源程序文件的任意位置都可以添加注释,且Java编译器不编译代码中的注释,也就是说代码中的注释对程序不产生任何影响。所以开发者不仅可以在注释中键入代码的说明文字、设计者的个人信息,还可以使用注释来屏蔽某些不希望执行的代码。Java提供了3种代码注释,分别为单行注释、多行注释和文档注释,这些注释在Eclipse中的效果如图2.1所示。

图2.1 在Eclipse中给代码添加注释的效果

1.单行注释

//为单行注释标记,从符号//开始直到换行为止的所有内容均作为注释而被编译器忽略。语法如下:

例如,以下代码为声明int型变量添加注释:

2.多行注释

/**/为多行注释标记,符号/*与*/之间的所有内容均为注释内容。注释中的内容可以换行。语法如下:

3.文档注释

/**…*/为文档注释标记。符号/**与*/之间的内容均为文档注释内容。当文档注释出现在声明(如类的声明、类的成员变量声明、类的成员方法声明等)之前时,会被Javadoc文档工具读取作为Javadoc文档内容。对于读者而言,文档注释并不是很重要,了解即可。

说明

一定要养成良好的编码习惯。软件编码规范中提到“可读性第一,效率第二”,所以程序员必须要在程序中添加适量的注释来提高程序的可读性和可维护性。建议程序中的注释总量要占程序代码总量的20%~50%。

2.2 变量与常量

在程序执行过程中,值能改变的量被称为变量,值不能改变的量被称为常量。变量与常量的命名都必须使用合法的标识符。本节将介绍标识符、关键字以及变量与常量的声明方法。

2.2.1 标识符与关键字

视频讲解:资源包\Video\02\2.2.1标识符与关键字.mp4

1.标识符

标识符可被简单地理解为一个名字,用来标识类名、变量名、方法名及数组名等。

Java规定标识符由任意顺序的字母、下画线(_)、美元符号($)和数字组成,并且第一个字符不能是数字。标识符不能是Java中的保留关键字。

下面这些标识符都是合法的:

下面这些标识符都是非法的:

在Java中,标识符的字母是严格区分大小写的,如good和Good是两个不同的标识符。Java使用Unicode标准字符集,最多可以标识65535个字符,因此,Java中的标识符不仅包括a、b、c等,还包括汉字、日文及其他语言中的文字。例如:

常见错误

用中文命名标识符是非常不好的编码习惯。当编译环境的字符集发生改变时,代码中所有的中文标识符全部会显示成乱码,程序将无法维护。因为Java是一种可以跨平台的开发语言,所以发生中文标识符显示成乱码这种情况的概率非常大。

编写Java代码有一套公认的命名规范。

(1)类名:通常使用名词,第一个单词首字母必须大写,后续单词首字母大写。

(2)方法名:通常使用动词,第一个单词首字母小写,后续单词首字母大写。

(3)变量:第一个单词首字母小写,后续单词首字母大写。

(4)常量:所有字母均大写。

(5)单词的拼接:通常使用userLastName方式拼接单词,而不是user_last_name方式。

2.关键字

关键字是Java中已被赋予特定意义的一些单词,不可以把这些单词作为标识符来使用。简单地这样理解:凡是在Eclipse中变成紫色粗体的单词,都是关键字。Java中的关键字如表2.1所示。

表2.1 Java中的关键字

2.2.2 变量

视频讲解:资源包\Video\02\2.2.2变量.mp4

首先说明一下什么是变量。变量就是可以改变值的量。可以把变量理解成一个“容器”,例如一个空烧杯,给变量赋值就相当于给烧杯倒水。如图2.2所示的那样,变量可以不断更换值,就像烧杯可以反复使用一样。

图2.2 变量如同烧杯,所盛的液体是可以更换的

为什么要声明变量呢?简单地说,就是要告诉编译器这个变量属于哪一种数据类型,这样编译器才知道需要分配多少空间给它,以及它可以存放什么样的数据。在程序运行过程中,如果内存空间内的值是变化的,那么这个内存空间就被称为变量名,而内存空间内的值就是变量值。在声明变量时可以不必赋值,也可以直接赋初值。

声明变量,并给变量赋值,代码如下:

说明

在Java中,允许使用汉字或其他语言文字作为变量名,如“int年龄=21”,在程序运行时不会出现错误,但建议读者尽量不要使用这些语言文字作为变量名。

对于变量的命名并不是随意的,应遵循以下几条规则。

变量名必须是一个有效的标识符。

变量名不可以使用Java中的关键字。

变量名不能重复。

应选择有意义的单词作为变量名。

2.2.3 常量

视频讲解:资源包\Video\02\2.2.3常量.mp4

与变量不同,在程序运行过程中一直不会改变的量被称为常量。常量在整个程序中只能被赋值一次,如果常量被多次赋值,则会发生编译错误。

在Java中,声明一个常量,除了要指定数据类型,还需要通过final关键字进行限定。声明常量的标准语法如下:

声明常量,并给常量赋值,代码如下:

说明

常量名通常使用大写字母,这样的命名规则可以清楚地将常量与变量区分开。

2.3 基本数据类型

Java中有8种基本数据类型来存储数值、字符和布尔值,如图2.3所示。

图2.3 Java的基本数据类型

2.3.1 整数类型

视频讲解:资源包\Video\02\2.3.1整数类型.mp4

整数类型用来存储整数数值,即没有小数部分的数值。可以是正数,也可以是负数。整数类型的数据根据它在内存中所占大小的不同,可分为byte、short、int和long 4种类型,它们具有不同的取值范围,如表2.2所示。这4个整数类型如同4个不同容积的烧杯,虽然用法一样,但在不同场景下需要使用不同容量的烧杯。

表2.2 整数类型

注意

给变量赋值时,要注意取值范围,超出相应范围就会出错。

下面分别对这4种整数类型进行介绍。

1.int型

声明int型变量,代码如下:

int型变量在内存中占4字节,也就是32位,在计算机中位是由0和1表示的,所以int型的5在计算机中是这样显示的:

说明

int是Java整数类型值的默认数据类型,当代码使用整数赋值或输出时,都默认为int型。例如:

这行代码在运行时,等同于下面这段代码:

2.byte型

byte型变量的声明方式与int型的相同。声明byte型变量,代码如下:

3.short型

short型变量的声明方式与int型的相同。声明short型变量,代码如下:

4.long型

由于long型的取值范围比int型的大,且属于高级数据类型,所以在赋值的时候,要和int型做出区分,需要在整数后加L或者l(小写的L)。声明long型变量,代码如下:

常见错误

int型是Java默认的整数类型,当为long型的变量或常量赋值时,如果没有添加L或l标识,则会按照如下的逻辑进行赋值:

2.3.2 浮点类型

视频讲解:资源包\Video\02\2.3.2浮点类型.mp4

浮点类型表示有小数部分的数字。Java中浮点类型分为单精度浮点类型(float)和双精度浮点类型(double),它们具有不同的取值范围,如表2.3所示。

表2.3 浮点类型

在默认情况下,小数都被看作double型,若想使用float型声明小数,则需要在小数后面添加F或f。另外,可以使用后缀d或D来明确表明这是一个double型数据,但加不加d或D并没有硬性规定。而声明float型变量时,如果不加F或f,系统会认为是double型的而出错。声明浮点类型变量,实例代码如下:

注意

浮点值属于近似值,在系统中运算后的结果可能与实际值有偏差。

实例01 根据身高、体重计算BMI指数

实例位置:资源包\Code\SL\02\01

视频位置:资源包\Video\02\

创建BMIexponent类,声明double型变量height来记录身高,单位为米,声明int型变量weight来记录体重,单位为千克,根据BMI=体重/(身高×身高)的公式计算BMI指数,实例代码如下:

运行结果如图2.4所示。

图2.4 输出BMI指数的运行结果

拓展训练

一、试着在Eclipse开发工具中实现将37℃转换为整型的华氏度。(提示:华氏度=32+摄氏度×1.8)(资源包\Code\Try\02\01)

二、一个圆柱形粮仓,底面直径为10米,高为3米,该粮仓体积为多少立方米?如果每立方米屯粮750千克,该粮仓一共可存储多少千克粮食?(资源包\Code\Try\02\02)

2.3.3 字符类型

视频讲解:资源包\Video\02\2.3.3字符类型.mp4

1.char型

字符类型(char型)用于存储单个字符,占用16位(2字节)的内存空间。在声明字符类型变量时,要以单引号表示,如's'表示一个字符。

Java可以把字符作为整数对待。由于Unicode编码采用无符号编码,可以存储65536个字符(0x0000~0xffff),所以Java中的字符可以处理大多数国家的语言文字。

说明

(1)如果想得到一个由0~65536的数所代表的Unicode表中相应位置上的字符,也必须使用char型显式转换。

(2)char型的默认值是空格。char型可以与整数做运算。

使用char关键字可声明字符类型变量,下面举例说明。

声明字符类型变量的代码如下:

由于字符a在Unicode表中的排序位置是97,因此允许将上面的语句写成:

说明

感兴趣的读者可以登录Unicode官网查阅更多关于Unicode的信息。

2.转义字符

转义字符是一种特殊的字符类型变量,以反斜线\开头,后跟一个或多个字符。转义字符具有特定的含义,不同于字符原有的含义,故称“转义”。Java中的转义字符如表2.4所示。

表2.4 转义字符

将转义字符赋值给字符变量时,与字符常量值一样需要使用单引号。

实例02 打印特殊字符

实例位置:资源包\Code\SL\02\02

视频位置:资源包\Video\02\

创建EscapeCharacter类,在类中定义多个转义字符并输出,实例代码如下:

运行结果如图2.5所示。

图2.5 转义字符的运行结果

拓展训练

一、试着在Eclipse开发工具中比较'g'和103是否相等。(资源包\Code\Try\02\03)

二、试着在Eclipse的控制台中输出“ABCDEFG”。(资源包\Code\Try\02\04)

2.3.4 布尔类型

视频讲解:资源包\Video\02\2.3.4布尔类型.mp4

布尔类型又称逻辑类型,只有true和false两个值,分别代表布尔逻辑中的“真”和“假”。布尔类型不能与整数类型进行转换。布尔类型通常被用在流程控制中作为判断条件。

实例03 用boolean变量记录登录用户和密码

实例位置:资源包\Code\SL\02\03

视频位置:资源包\Video\02\

创建LoginService类,首先弹出输入提示,然后获取用户输入的值,判断用户输入的值是否与默认值相等,最后将结果赋给一个boolean变量并输出,实例代码如下:

运行结果如图2.6所示。

图2.6 判断密码是否正确的运行结果

拓展训练

一、用true和false分别判断身高为1米和1.5米的儿童乘坐火车时是否应该购票(超过1.2米的儿童乘坐火车时需要购票)。(资源包\Code\Try\02\05)

二、员工a与员工b的月薪分别为3000元和4500元,判断哪位员工需要缴税,哪位员工不需要缴税(月薪超过3500元需要缴纳个人所得税)。(资源包\Code\Try\02\06)

在Java虚拟机中,布尔值只占用1位内存空间,但由于Java的最小分配单元是1字节,所以一个布尔变量在内存中会占用1字节。例如true在内存中的二进制数表示是:

2.4 数据类型转换

数据类型转换是将一个值从一种数据类型更改为另一种数据类型的过程。例如,可以将String类型数据“457”转换为一个数值型数据,而且可以将任意类型的数据转换为String类型。

数据类型转换有两种方式,即隐式转换与显式转换。如果从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功的;而从高精度数据类型向低精度数据类型转换则必然会有信息丢失,甚至有可能失败。这种转换规则就如图2.7所示的两个场景,高精度数据类型相当于一个大水杯,低精度数据类型相当于一个小水杯,大水杯可以轻松装下小水杯中所有的水,但小水杯无法装下大水杯中所有的水,装不下的部分必然会溢出。

图2.7 大水杯可以装下小水杯所有的水,但小水杯无法装下大水杯所有的水

2.4.1 隐式转换

视频讲解:资源包\Video\02\2.4.1隐式转换.mp4

从低级类型向高级类型的转换,系统将自动执行,程序员无须进行任何操作,这种类型的转换被称为隐式转换,也可以称其为自动转换。下列基本数据类型会涉及数据转换(不包括逻辑类型),这些类型按精度从“低”到“高”排列的顺序为byte<short<nt<long<float<double,如图2.8所示,其中char类型比较特殊,它可以与部分int型数据兼容,且不会发生精度变化。

图2.8 自动转换的兼容顺序图

实例04 隐式转换自动提升到双精度

实例位置:资源包\Code\SL\02\04

视频位置:资源包\Video\02\

创建ImplicitConversion类,让低精度变量与高精度变量同时做计算,查看计算结果属于哪种精度,实例代码如下:

运行结果如图2.9所示。

图2.9 隐式转换的运行结果

拓展训练

一、使用char型声明' a'~' g',然后输出它们相加后的结果。(资源包\Code\Try\02\07)

二、IP地址每段数字的最大值可以由byte型的最大值与short的型128相加后得到,使用隐式转换控制台输出IP地址每段数字的最大值。(资源包\Code\Try\02\08)

使用int型变量为float型变量赋值,此时int型变量将被隐式转换成float型变量。

此时执行输出语句,y的结果是50.0。

但如果代码中的float和int交换了位置,编译环境就会弹出float值无法转变成int值的错误,如图2.10所示。

图2.10 float值无法转变成int值

像这种从高精度转换成低精度的场景,在开发程序的时候经常发生,遇到这种问题该怎么办?这时就需要用到显式转换了。

2.4.2 显式转换

视频讲解:资源包\Video\02\2.4.2显式转换.mp4

当把高精度变量的值赋给低精度变量时,必须使用显式转换(又称强制类型转换)。当执行显式转换时可能会导致精度缺失。语法如下:

下面通过几种常见的显式转换的实例来说明。

实例05 利用显式转换实现精度缺失

实例位置:资源包\Code\SL\02\05

视频位置:资源包\Video\02\

创建ExplicitConversion类,使用显式转换将不同类型的变量转换成精度更低的类型,输出转换之后发生精度缺失的结果,实例代码如下:

运行结果如图2.11所示。

图2.11 显式转换的运行结果

说明

当把整数赋值给byte、short、int、long型变量时,不可以超出这些变量的取值范围,否则必须进行强制类型转换。例如:

拓展训练

一、将65~71显式转换为char型并输出。(资源包\Code\Try\02\09)

二、一辆货车运输箱子,载货区宽2米、长4米,一个箱子宽1.5米、长1.5米,请问载货区一层可以放多少个箱子?(资源包\Code\Try\02\10)

2.5 运算符

运算符是一些特殊的符号,主要用于数学函数、一些类型的赋值语句和逻辑语句。Java中提供了丰富的运算符,如赋值运算符、算术运算符、比较运算符等。

2.5.1 赋值运算符

视频讲解:资源包\Video\02\2.5.1赋值运算符.mp4

赋值运算符用符号=表示,它是一个二元运算符(对两个操作数做处理),其功能是将右方操作数的值赋给左方的操作数。例如:

左方的操作数必须是一个变量,而右边的操作数则可以是变量(如a、number)、常量(如123、'book')或者有效的表达式(如45*12)。

实例06 使用赋值运算符为变量赋值

实例位置:资源包\Code\SL\02\06

视频位置:资源包\Video\02\

创建EqualSign类,首先初始化整型变量a、b、c,然后使用赋值运算符改变变量a、b、c的值,实例代码如下:

运行结果如图2.12所示。

图2.12 使用赋值运算符的运行结果

说明

在Java中,可以把赋值运算符连在一起使用。如:

在这个语句中,变量x、y、z都得到同样的值5,但在程序开发中不建议使用这种赋值语法。

拓展训练

一、使用赋值运算符输出银行的年利率(2.95%)以及存款额15000元后,计算并输出存款3年后的本金和利息的总和。(资源包\Code\Try\02\11)

二、输入1美元=6.8995元人民币后,计算10000元人民币可兑换多少美元。(资源包\Code\Try\02\12)

2.5.2 算术运算符

视频讲解:资源包\Video\02\2.5.2算术运算符.mp4

Java中的算术运算符主要有+(加号)、(减号)、*(乘号)、/(除号)和%(取余),这些都是二元运算符。Java中算术运算符的功能及使用方式如表2.5所示。

表2.5 算术运算符的功能及使用方式

续表

其中,+和运算符还可以作为数据的正负符号,如+5、-7。

注意

在进行除法和取余运算时,0不能做除数。例如,对于语句“nt a=5/0;”,系统会报出ArithmeticException异常。

实例07 模拟计算器功能

实例位置:资源包\Code\SL\02\07

视频位置:资源包\Video\02\

创建ArithmeticOperator类,让用户输入两个数字,分别用5种运算符对这两个数字进行计算,实例代码如下:

运行结果如图2.13所示。

图2.13 使用算术运算符的运行结果

说明

+运算符也有拼接字符串的功能。

拓展训练

一、平均加速度,即速度的变化量除以发生变化所用的时间。现有一辆汽车用了8.7秒从每小时0千米加速到每小时100千米,计算并输出这辆汽车的平均加速度。(资源包\Code\Try\02\13)

二、使用克莱姆法则求解二元一次方程组。(资源包\Code\Try\02\14)

21.8x+2y=28

7x+8y=62

提示:克莱姆法则求解二元一次方程组的公式如图2.14所示。

图2.14 克莱姆法则求解二元一次方程组的公式

2.5.3 自增和自减运算符

视频讲解:资源包\Video\02\2.5.3自增和自减运算符.mp4

自增、自减运算符是单目运算符,可以放在变量之前,也可以放在变量之后。自增、自减运算符的作用是使变量的值加1或减1。语法如下:

实例08 变量实现自动增减服务

实例位置:资源包\Code\SL\02\08

视频位置:资源包\Video\02\

创建AutoIncrementDecreasing类,对一个整型变量先做自增运算,再做自减运算,实例代码如下:

运行结果如图2.15所示。

自增、自减运算符的摆放位置不同,增减的操作顺序也会随之不同。前置的自增、自减运算符会先将变量的值加1(或减1),再让该变量参与表达式的运算。后置的自增、自减运算符会先让变量参与表达式的运算,再将该变量加1(或减1),如图2.16所示。

图2.15 使用自增、自减运算符的使用运行结果

图2.16 自增运算符放在不同位置时的运算顺序

拓展训练

一、一艘游轮以每小时36千米的速度匀速行驶了1小时,使用自增运算符在Eclipse的控制台输出第i(i>1)小时后该游轮航行了多少千米。(资源包\Code\Try\02\15)

二、一个新建小区内有70个停车位。现有一批新进住户购买车位,使用自减运算符在Eclipse的控制台输出剩余的车位数。(资源包\Code\Try\02\16)

2.5.4 关系运算符

视频讲解:资源包\Video\02\2.5.4关系运算符.mp4

关系运算符属于二元运算符,用来判断一个操作数与另一个操作数之间的关系。关系运算符的计算结果都是布尔类型的,如表2.6所示。

表2.6 关系运算符

实例09 对用户输入的值进行比较

实例位置:资源包\Code\SL\02\09

视频位置:资源包\Video\02\

创建RelationalOperator类,记录用户输入的两个数字,分别用各个关系运算符来计算这两个数字之间的关系,实例代码如下:

运行结果如图2.17所示。

图2.17 使用关系运算符比较两个数字的运行结果

拓展训练

一、判断3是不是偶数,再判断对3使用自增运算符后的结果是不是奇数。(资源包\Code\Try\02\17)

二、国家推出二胎政策,A家庭陆续生了2个孩子,B家庭陆续生了4个孩子,哪个家庭属于超生家庭?(资源包\Code\Try\02\18)

2.5.5 逻辑运算符

视频讲解:资源包\Video\02\2.5.5逻辑运算符.mp4

假定某蛋糕店在每周二下午7点至8点和每周六下午5点至6点对生日蛋糕进行折扣让利促销活动,那么想参加该活动的顾客,就要在时间上满足条件:周二且7:00 PM~8:00 PM或者周六且5:00 PM~6:00 PM,这里就用到了逻辑关系。

逻辑运算符是对真和假这两种逻辑值进行运算,运算后的结果仍是一个逻辑值。逻辑运算符包括&&(逻辑与)、||(逻辑或)和!(逻辑非)。逻辑运算符计算的值必须是boolean型数据。在逻辑运算符中,除了!是一元运算符,其他都是二元运算符。Java中的逻辑运算符如表2.7所示。

表2.7 逻辑运算符

说明

为了方便大家理解,表格中将“真”“假”以“对”“错”的方式展示出来。

逻辑运算符的运算结果如表2.8所示。

表2.8 逻辑运算符的运算结果

续表

逻辑运算符与关系运算符同时使用,可以完成复杂的逻辑运算。

实例10 利用逻辑运算符和关系运算符进行运算

实例位置:资源包\Code\SL\02\10

视频位置:资源包\Video\02\

创建LogicalAndRelational类,首先利用关系运算符计算布尔结果,再用逻辑运算符做二次计算,实例代码如下:

运行结果如图2.18所示。

图2.18 利用逻辑运算符和关系运算符进行运算的运行结果

拓展训练

一、有两名男性应聘者:一位25岁,一位32岁。该公司招聘信息中有一个要求,即男性应聘者的年龄在23~30岁,判断这两名应聘者是否满足这个要求。(资源包\Code\Try\02\19)

二、在明日学院网站首页上,可以使用账户名登录,也可以使用手机号登录,还可以使用电子邮箱地址登录。请判断某用户是否可以登录。(已知服务器中有如下记录,账户名:张三,手机号:12345678901,电子邮箱:zhangsan@163.com。)(资源包\Code\Try\02\20)

2.5.6 位运算符

视频讲解:资源包\Video\02\2.5.6位运算符.mp4

位运算符的操作数类型是整型,可以是有符号的,也可以是无符号的。位运算符可以分为两大类:位逻辑运算符和位移运算符,如表2.9所示。

表2.9 位运算符

1.位逻辑运算符

位逻辑运算符包括&、|、^和~,前3个是双目运算符,第4个是单目运算符。这4个运算符的运算结果如表2.10所示。

表2.10 位逻辑运算符计算二进制数的结果

&、|、^也可以用于逻辑运算,运算结果如表2.11所示。

表2.11 位逻辑运算符计算布尔值的结果

实例11 使用位逻辑运算符进行运算

实例位置:资源包\Code\SL\02\11

视频位置:资源包\Video\02\

创建LogicalOperator类,用位运算符先对整数进行计算,再对布尔值进行计算,查看计算的结果,实例代码如下:

运行结果如图2.19所示。

拓展训练

一、战斗机是飞机,战斗鸡不是飞机。判断以下说法是否正确:

①“战斗机”和“战斗鸡”都是飞机;

②“战斗机”是飞机或“战斗鸡”是飞机;

③“战斗机”不是飞机异或“战斗鸡”不是飞机。(资源包\Code\Try\02\21)

二、用户创建新账户后,服务器为保护用户隐私,使用异或运算对用户密码进行二次加密,计算公式为“加密数据=原始密码^加密算子”,已知加密算子为整数79,请问用户密码459137经过加密后的值是多少?(资源包\Code\Try\02\22)

2.位移运算符

位移运算符有3个,分别是左移<<、右移>>和无符号右移>>>。这3个运算符都可以将任意数字以二进制数的方式进行位数移动运算。其中左移<<和右移>>不会改变数字的正负,但经过无符号右移>>>运算之后,只会产生正数结果。

实例12 使用位移运算符对密码加密

实例位置:资源包\Code\SL\02\12

视频位置:资源包\Video\02\

创建BitwiseOperator类,声明一个整型变量用于保存原密码,再声明另一个整型变量当作加密参数,原密码与加密参数进行左移运算会生成一个新数字,新数字再与加密参数进行右移运算则会还原回原来的密码,实例代码如下:

运行结果如图2.20所示。

图2.19 使用位逻辑运算符的运行结果

图2.20 密码加密和解密的运行结果

拓展训练

一、声明int型变量a,其值为20,在Eclipse的控制台输出a>>32、a>>33和a>>1的结果。(资源包\Code\Try\02\23)

二、声明long型变量a,其值为15006300079L,在Eclipse的控制台输出a>>64、a>>65和a>>1的结果。(资源包\Code\Try\02\24)

2.5.7 复合赋值运算符

视频讲解:资源包\Video\02\2.5.7复合赋值运算符.mp4

和其他主流编程语言一样,Java中也有复合赋值运算符。所谓的复合赋值运算符,就是将赋值运算符与其他运算符合并成一个运算符来使用,从而实现两种运算符的效果。Java中的复合赋值运算符如表2.12所示。

表2.12 复合赋值运算符

以+=为例,虽然a+=1与a=a+1两者的最后计算结果是相同的,但是在不同场景下,两种运算符都有各自的优势和劣势。

(1)低精度类型自增。

在Java中,整数的默认类型为int型,所以这样的赋值语句会报错:

在没有进行强制类型转换的条件下,a+1的结果是一个int值,无法直接赋给一个byte变量。但是如果使用+=实现递增计算,就不会出现这个问题,例如:

(2)不规则的多值相加

+=虽然简单、强大,但是有些时候是不好用的,比如下面这个语句:

如果将这条语句改成复合赋值运算符就会变得非常烦琐:

常见错误

复合赋值运算符中两个符号之间没有空格,不要写成“a+=1;”。

2.5.8 三元运算符

视频讲解:资源包\Video\02\2.5.8三元运算符.mp4

三元运算符的使用格式为:

三元运算符的运算规则为:若条件表达式的值为true,则整个表达式取“值1”,否则取“值2”。例如:

如上例所示,表达式“20<45”的运算结果返回真,那么boolean型变量b取值为true;相反,表达式“20<45”的运算结果返回假,则boolean型变量b取值false。

三元运算符等价于if…else语句,代码如下:

2.5.9 圆括号

视频讲解:资源包\Video\02\2.5.9圆括号.mp4

圆括号可以提升公式中计算过程的优先级,在编程中十分常用。如图2.21所示,使用圆括号更改运算的优先级,可以得到不同的结果。

图2.21 圆括号更改运算的优先级

圆括号还有调整代码格式、增强阅读性的功能。比如这样一个公式:

这样的计算公式复杂且难读,如果稍有疏忽就会估错计算结果,影响后续代码的设计。但要是给这个计算公式加上圆括号,且不改变任何运算优先级,如下:

这行代码的运算结果不会发生任何改变,但运算逻辑却显得非常清晰。

2.5.10 运算符优先级

视频讲解:资源包\Video\02\2.5.10运算符优先级.mp4

Java中的表达式就是使用运算符连接起来的、符合Java规则的式子。运算符的优先级决定了表达式中运算执行的先后顺序。通常优先级由高到低的顺序依次是:增量和减量运算、算术运算、比较运算、逻辑运算以及赋值运算。

如果两个运算有相同的优先级,那么左边的表达式要比右边的表达式先被处理。表2.13显示了在Java中众多运算符的优先级。

表2.13 运算符的优先级

续表

多学两招

在编写程序时,尽量使用圆括号( )运算符来限定运算顺序,以免运算顺序发生错误。

2.6 小结

本章向读者介绍的是Java语言基础,其中需要读者重点掌握的是Java中的基本数据类型、变量与常量以及运算符三大知识点。读者经常会认为String类型是Java中的基本数据类型,在此提醒读者,Java的基本数据类型中并没有String类型。另外,要对数据类型之间的转换有一定的了解。在使用变量时,需要读者注意的是变量的有效范围,否则在使用时会出现编译错误或浪费内存资源的情况。此外,运算符也是Java语言基础中的重点,正确使用这些运算符,才能得到预期的结果。

本章e学码:关键知识点拓展阅读

BMI指数      单精度   精度丢失   十六进制

final关键字     单目运算符 克莱姆法则  双精度

Scanner      堆和栈   类      无符号编码

Unicode标准字符集 二进制数  内存     一元运算符

八进制       二元运算符 内存空间   异常

表达式       关键字   三元运算符  溢出

初始化       加密参数  声明     字节 J8kkDe1/XiU83ib06SsB9bCwkNaKcUFiVN0chvrf6qyx0BwGd55WTYKQ2eh44tVd

点击中间区域
呼出菜单
上一章
目录
下一章
×