《JAVA程序设计基础第3章陈国君.ppt》由会员分享,可在线阅读,更多相关《JAVA程序设计基础第3章陈国君.ppt(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3 3章章JavaJava语言基础语言基础1通过本章的学习,主要掌握以下知识点:通过本章的学习,主要掌握以下知识点:Java使用的数据类型使用的数据类型 数据类型转换数据类型转换 由键盘输入数据由键盘输入数据 运算符与表达式运算符与表达式 本章的重点:本章的重点:由键盘输入数据由键盘输入数据本章的难点:本章的难点:数据类型转换数据类型转换 表达式及运算符的优先级、结合性表达式及运算符的优先级、结合性 本本章章主主要要介介绍绍编编写写Java程程序序必必须须掌掌握握的的若若干干语语言言基基础础知知识识,包包括括数数据据类类型型、变变量量、常常量量、表表达达式式等等。掌掌握握这这些些基基础础知
2、知识识,是是编编写正确写正确Java程序的前提条件。程序的前提条件。3.1 数据类型数据类型 在在程程序序设设计计中中,数数据据是是程程序序的的必必要要组组成成部部分分,也也是是程程序序处处理理的的对对象象。不不同同的的数数据据有有不不同同的的数数据据类类型型,不不同同的的数数据据类类型型有有不不同同的的数数据据结结构构、不不同同的的存存储储方方式式,并并且且参参与与的的运运算算也也不不相相同同。通通常常计计算算机机语语言言将将数数据据按按其其性性质质进进行行分分类类,每每一一类类称称为为一一种种数数据据类类型型(data type)。数数据据类类型型定定义义了了数数据据的的性性质质、取取值值
3、范范围、存储方式以及对数据所能进行的运算和操作。围、存储方式以及对数据所能进行的运算和操作。Java中中的的数数据据类类型型分分为为两两大大类类,一一类类是是基基本本数数据据类类型型(primitive types),另另一一类类是是引引用用类类型型(reference types)。基本数据类型有基本数据类型有:整型整型(integral)浮点型浮点型(floting)逻辑型逻辑型(logical)字符型字符型(textual)引用类型包括引用类型包括:类类(class)数组数组(array)接口接口(interface)Java定义了定义了4类共类共8种基本类型,它们的分类及种基本类型,它
4、们的分类及关键字如下:关键字如下:整型:整型:byte,short,int,long。浮点型:浮点型:float,double。逻辑型:逻辑型:boolean。字符型:字符型:char。1整型整型整数有正整数、零、负整数,其含义与数学整数有正整数、零、负整数,其含义与数学中的含义相同。有三种进制表示形式。中的含义相同。有三种进制表示形式。Java定义了四种表示整数的类型:字节型定义了四种表示整数的类型:字节型(byte)、短整型、短整型(short)、整型、整型(int)、长整型、长整型(long)。每种整型的数据都是带符号位的。每种整型的数据都是带符号位的。Java的每种数据类型都对应的每种
5、数据类型都对应个默认的数值,使得这个默认的数值,使得这种数据类型变量的取值总是确定的,体现了其安种数据类型变量的取值总是确定的,体现了其安全性。它们的特性如表全性。它们的特性如表3.1所示。所示。表表3.1 Java的四种整型的四种整型类类 型型数据位数据位范范 围围byte(字字节节型型)8-128127,即,即2727-1Short(短整型短整型)16-32 76832 767,即,即-215215-1int(整型整型)32-2 147 483 6482 147 483 647,即,即-231231-1long(长长整型整型)64-9 223 372 036 854 775 8089 22
6、3 372 036 854 775 807,即即-263263-l2浮点型浮点型Java用浮点型表示数学中的实数,也就是说用浮点型表示数学中的实数,也就是说既有整数部分又有小数部分的数。浮点数有两种既有整数部分又有小数部分的数。浮点数有两种表示方式。表示方式。标准计数法标准计数法科学计数法科学计数法Java的浮点型有单精度浮点的浮点型有单精度浮点(float)和双精和双精度浮点度浮点(double)两种。它们的宽度和范围如表两种。它们的宽度和范围如表3.2所示。所示。表表3.2 Java的两种浮点型的两种浮点型类类型型数据位数据位范范围围float(单单精度浮点精度浮点)321.4E-453.
7、4E+38double(双精度浮点双精度浮点)644.9E-3241.8E+3083逻辑型逻辑型逻辑型逻辑型(boolean)用来表示逻辑值,也称用来表示逻辑值,也称为布尔型。它只有为布尔型。它只有true和和false两个取值。其中,两个取值。其中,true代表代表“真真”,false代表代表“假假”,true和和false不能转换成数字表示形式。不能转换成数字表示形式。4字符型字符型字符型字符型(char)用来存储字符。用来存储字符。Java语言是用语言是用Unicode编码表达的字符,在内存中占两个字节。编码表达的字符,在内存中占两个字节。由于由于Java的字符类型采用了的字符类型采用了
8、Unicode这种新的国这种新的国际标准编码方案,因而便于东方字符和西方字符际标准编码方案,因而便于东方字符和西方字符的处理。因此,与其他语言相比,的处理。因此,与其他语言相比,Java处理多语处理多语种的能力大大加强。种的能力大大加强。说明说明l字符型数据只表示单个字符,定界符为。lJava语言中所有可见的ASCII字符都可以用单引号括起来成为字符。l字符型数据可以转化成整数。取值在065535之间。现将现将Java的的4类类8种基本数据类型总结归纳成表种基本数据类型总结归纳成表3.3。表表3.3 Java的基本数据类型的基本数据类型数据数据类类型型关关键键字字占用字占用字节节数数默默认认数
9、数值值取取值值范范围围布布尔尔型型boolean1falsetrue,false字字节节型型byte10-128127短整型短整型short20-3276832767整型整型int40-21474836482147483647长长整型整型long80L-92233720368547758089223372036854775807单单精度浮点型精度浮点型float40.0F1.410-453.41038双精度型双精度型double80.0D4.910-3241.810308字符型字符型char2u0000u0000uffff为了使用上的方便为了使用上的方便Java提供了数值型数据的最提供了数值型
10、数据的最大值与最小值的标识符及常量值。如表大值与最小值的标识符及常量值。如表3.4所示。所示。表表3.4 数值型常量的特殊值代码数值型常量的特殊值代码 数据数据类类型型所在的所在的类类最小最小值值代代码码最大最大值值代代码码byteJava.lang.ByteByte.MIN_VALUEByte.MAX_VALUEshortJava.lang.ShortShort.MIN_VALUEShort.MAX_VALUEintJava.lang.IntegerInteger.MIN_VALUEInteger.MAX_VALUElongJava.lang.LongLong.MIN_VALUELong.M
11、AX_VALUEfloatJava.lang.FloatFloat.MIN_VALUEFloat.MAX_VALUEdoubleJava.lang.DoubleDouble.MIN_VALUEDouble.MAX_VALUE3.2 关键字与标识符关键字与标识符 1关键字关键字关键字关键字(keyword)是是Java中具有特殊含义的字符序中具有特殊含义的字符序列,因此列,因此Java不允许用户对关键字赋予其他的含义。不允许用户对关键字赋予其他的含义。Java定义的关键字如表定义的关键字如表3.5所示。所示。表3.5 Java定义的关键字abstractbooleanbreakbytecasec
12、atchcharclasscontinuedefaultdodoubleelseextendsfalsefinalfinallyfloatforifimplementsimportinstanceofintinterfacelongnativenewnullpackageprivateprotectedpublicreturnshortstaticsuperswitchsynchronizedthisthrowthrowstransienttruetryvoidvolatilewhile2标识符标识符Java用标识符用标识符(identifier)表示变量名、类表示变量名、类名和方法名。也就是
13、说,任何一个变量、常量、名和方法名。也就是说,任何一个变量、常量、方法、对象和类都需要有名字,这些名字就是标方法、对象和类都需要有名字,这些名字就是标识符。标识符可以由编程者自由指定,但是需要识符。标识符可以由编程者自由指定,但是需要遵循一定的语法规定。标识符要满足如下的规定:遵循一定的语法规定。标识符要满足如下的规定:(1)标识符可以由字母、数字和下划线标识符可以由字母、数字和下划线(_)、美元符号美元符号($)组合而成;组合而成;(2)标识符必须以字母、下划线或美元符号标识符必须以字母、下划线或美元符号开头,不能以数字开头。开头,不能以数字开头。Java编码习惯编码习惯l类名首字母大写。l
14、变量、方法及对象首字母小写。l标识符所包含的单词紧靠在一起,大写首字母。l常量应该大写。lJava包全部小写。3.3 常量常量常量存储的是在程序中不能被修改的固定值,常量存储的是在程序中不能被修改的固定值,也就是说常量是在程序运行的整个过程中保持其值也就是说常量是在程序运行的整个过程中保持其值不改变的量。不改变的量。Java中的常量也是有类型的,包括整中的常量也是有类型的,包括整型、浮点型、逻辑型、字符型和字符串型常量。型、浮点型、逻辑型、字符型和字符串型常量。1整型常量整型常量整型常量可以用来给整型变量赋值,整型常整型常量可以用来给整型变量赋值,整型常量可以采用十进制、八进制和十六进制表示。
15、量可以采用十进制、八进制和十六进制表示。2浮点型常量浮点型常量 浮点型常量表示的是可以含有小数部分的数浮点型常量表示的是可以含有小数部分的数值常量。根据占用内存长度的不同,可以分为一般值常量。根据占用内存长度的不同,可以分为一般浮点浮点(单精度单精度)常量和双精度浮点常量两种。其中,常量和双精度浮点常量两种。其中,单精度常量后跟一个字母单精度常量后跟一个字母f或或F,双精度常量后跟一,双精度常量后跟一个字母个字母d或或D。双精度常量后的。双精度常量后的d或或D可以省略。可以省略。转义符是一些有特殊含义、很难用一般方式转义符是一些有特殊含义、很难用一般方式来表达的字符,如回车、换行等。为了表达清
16、楚来表达的字符,如回车、换行等。为了表达清楚这些特殊字符,这些特殊字符,Java中引入了一些特别的定义。中引入了一些特别的定义。所有的转义符都用反斜线所有的转义符都用反斜线()开头,后面跟着一开头,后面跟着一个字符来表示某个特定的转义符,如表个字符来表示某个特定的转义符,如表3.6所示。所示。转义转义字符字符所代表的意所代表的意义义f换页(Form feed),走纸到下一页。b退格(Backspace),后退一格。n换行(New line),将光标移到下一行的开始。r回车(Carriage return),将光标移到当前行的行首,但不移到下一行。t横向跳格(Tab),将光标移到下一个制表符位置
17、。反斜线字符(Backslash),输出一个反斜杠。单引号字符(Single quote),输出一个单引号。双引号字符(Double quote),输出一个双引号。uxxxx1到4位十六进制数(xxxx)所表示的unicode字符。ddd1到3位八制数(ddd)所表示的unicode字符,范围在八进制的000377之间。表3.6 常用的转义字符5字符串常量字符串常量字符串常量是用双引号括起的一串若干个字字符串常量是用双引号括起的一串若干个字符符(可以是可以是0个个)。字符串中可以包括转义符。字符串中可以包括转义符。6.常量的声明常量的声明常量声明的形式与变量声明基本一样,只需用常量声明的形式与
18、变量声明基本一样,只需用关键字关键字final标识,通常标识,通常final写在最前面。例如,写在最前面。例如,final int MAX10;final float PI3.14f;3.4 变量变量在程序中使用的值大多是需要经常变化的数据,在程序中使用的值大多是需要经常变化的数据,用常数值表示显然是不够的,因此每一种计算机语用常数值表示显然是不够的,因此每一种计算机语言都使用变量言都使用变量(variable)来存储数据,变量的值在来存储数据,变量的值在程序中是可以改变的,使用变量的原则是程序中是可以改变的,使用变量的原则是“先声明先声明后使用后使用”,即变量在使用前必须先声明。,即变量在使
19、用前必须先声明。1变量声明变量声明 计算机程序是通过内存变量来操纵内存中的计算机程序是通过内存变量来操纵内存中的数据,所以程序在使用任何变量之前首先应该在数据,所以程序在使用任何变量之前首先应该在该变量和内存单元之间建立联系,这个过程称为该变量和内存单元之间建立联系,这个过程称为变量的声明或称变量的定义。变量的声明或称变量的定义。变量具有三个基本要素:名字、类型和值。变量具有三个基本要素:名字、类型和值。变量声明的格式如下:变量声明的格式如下:=,=例如,例如,int i,j,k;在声明变量的同时也可以对变量进行初始化,即赋在声明变量的同时也可以对变量进行初始化,即赋初值。例如,初值。例如,i
20、nt i0;2变量的赋值变量的赋值当声明一个变量并没有赋初值或需要重新对变当声明一个变量并没有赋初值或需要重新对变量赋值时,就需要使用赋值语句。量赋值时,就需要使用赋值语句。Java语言的赋值语言的赋值语句同其他计算机语言的赋值语相同,其格式为:语句同其他计算机语言的赋值语相同,其格式为:变量名变量名=值值下面举例来说明。下面举例来说明。boolean b=true;/声明声明boolean型变量并赋值型变量并赋值 int x,y=8;/声明声明int型变量型变量 float f=2.718f;/声明声明float型变量并赋值型变量并赋值 double d=3.1415;/声明声明double
21、型变量并赋值型变量并赋值 char c;/声明声明char型变量型变量 c=u0031;/为为char型变量赋值型变量赋值 x=12;/为为int型变量赋值型变量赋值3.5数据类型转换数据类型转换Java的数据类型在定义时就已经决定,因此的数据类型在定义时就已经决定,因此不能随意转换成其他的数据类型,但不能随意转换成其他的数据类型,但Java容许用容许用户有限度地做类型转换处理,这就是所谓的数据户有限度地做类型转换处理,这就是所谓的数据类型转换,简称类型转换。类型转换就是在类型转换,简称类型转换。类型转换就是在Java程序中,常数或变量从一种数据类型转换到另一程序中,常数或变量从一种数据类型转
22、换到另一种数据类型。种数据类型。一、数值型不同类型数据的转换一、数值型不同类型数据的转换由于数值型也分为不同的类型,所以数值型数由于数值型也分为不同的类型,所以数值型数据也有类型转换问题。据也有类型转换问题。1自动类型转换自动类型转换在程序中已经定义好的数值型的变量,若是想在程序中已经定义好的数值型的变量,若是想以另一种类型表示时,以另一种类型表示时,Java会在下列条件同时成立会在下列条件同时成立时,自动进行数据类型的转换:时,自动进行数据类型的转换:(1)转换前的数据类型与转换后的类型兼容。)转换前的数据类型与转换后的类型兼容。(2)转换后的数据类型的表示范围比转换前的)转换后的数据类型的
23、表示范围比转换前的类型大。类型大。【例3.1】数据类型的自动转换。/app3_1.java 类型自动转换public class app3_1 public static void main(String args)int a=155;float b=21.0f;System.out.println(”a=”+a+”,b=”+b);/输出a,b的值System.out.println(”a/b=”+(a/b);/输出a/b的值 输出结果为:a=155,b=21.0a/b=7.38095242强制类型转换强制类型转换如果要将较长的数据转换成较短的数据时,就如果要将较长的数据转换成较短的数据时,就
24、要进行强制类型转换。强制类型转换的格式如下:要进行强制类型转换。强制类型转换的格式如下:(欲转换的数据类型)变量名(欲转换的数据类型)变量名【例【例3.2】整型与浮点数据类型的自动转换。】整型与浮点数据类型的自动转换。/app3_2.java 整数与浮点数的类型转换整数与浮点数的类型转换public class app3_2 public static void main(String args)int a=155;int b=9;float g,h;System.out.println(”a=”+a+”,b=”+b);/输出输出a,b的值的值g=a/b;/将将a除以除以b的结果放在的结果放在
25、g中中System.out.println(”a/b=”+g+”n”);/输出输出g的值的值System.out.println(”a=”+a+”,b=”+b);/输出输出a,b的值的值h=(float)a/b;/先将先将a强制转换成强制转换成float类型后再参加运算类型后再参加运算 System.out.println(”a/b=”+h);/输出输出h的值的值 程序执行结果如下:程序执行结果如下:a=155,b=9a/b=17.0a=155,b=9a/b=17.222221public class TestConvert public static void main(String arg
26、)int i1=123;int i2=456;double d1=(i1+i2)*1.2;/系统将转换为double型运算 float f1=(float)(i1+i2)*1.2);/需要加强制转换符 byte b1=67;byte b2=89;byte b3=(byte)(b1+b2);/系统将转换为int型运算,需 /要强制转换符 System.out.println(b3);double d2=1e200;float f2=(float)d2;/会产生溢出 System.out.println(f2);float f3=1.23f;/必须加f long l1=123;long l2=30
27、000000000L;/必须加l float f=l1+l2+f3;/系统将转换为float型计算 long l=(long)f;/强制转换会舍去小数部分(不是四舍五入)二、字符串型数据与整型数据相互转换二、字符串型数据与整型数据相互转换1字符串转换成数值型数据字符串转换成数值型数据数字字符串型数据转换成数字字符串型数据转换成byte、short、int、float、double、long等数据类型,可以分别使用表等数据类型,可以分别使用表3.7所提供的所提供的Byte、Short、Integer、Float、Double、Long类的类的parseXXX方法。方法。表表3.7 字符串转换成数
28、值型数据的方法字符串转换成数值型数据的方法转转 换换 的的 方方 法法功功 能能 说说 明明Byte.parseByte()将字符串将字符串转换为转换为字字节节型数据型数据Short.parseShort()将字符串将字符串转换为转换为短整型数据短整型数据Integer.parseInt()将字符串将字符串转换为转换为整型数据整型数据Long.parseLong()将字符串将字符串转换为长转换为长整型数据整型数据Float.parseFloat()将字符串将字符串转换为转换为浮点型数据浮点型数据Double.parseDouble()将字符串将字符串转换为转换为双精度型数据双精度型数据例如:例
29、如:String MyNumber=1234.567;/定义字符串型变量定义字符串型变量MyNumberfloat MyFloat=Float.parseFloat(MyNumber);3.6由键盘输入数据由键盘输入数据在程序设计中,经常需要从键盘上读取数据,在程序设计中,经常需要从键盘上读取数据,这时就需要用户从键盘输入数据,从而可以增加与这时就需要用户从键盘输入数据,从而可以增加与用户之间的交互。利用键盘输入数据,用户之间的交互。利用键盘输入数据,Java语言提语言提供了二种输入格式。供了二种输入格式。import java.io.*;public class class_name /类名
30、称类名称 public static void main(String args)throws IOException bufferedReader buf;String str;buf=new bufferedReader(new InputStreamReader(System.in);str=buf.readLine();格式1import java.io.*;public class class_name /类名称类名称 public static void main(String args)throws IOException InputStreamReader sysin=new
31、InputStreamReader(System.in)bufferedReader buf=new bufferedReader(sysin);String str;str=buf.readLine();也可以表示为:lSystem.in 接受从控制台输入的字节lnew InputStreamReader(System.in);构造一个InputStreamReader对象,这个对象是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。lnew BufferedReader(new InputStreamReader(System.in);构造一个字符流的缓存,里
32、面存放在控制台输入的字节转换后成的字符。lstr=buf.readLine();从这个缓存中读取一行的内容lInputStreamReader 就是一个可以从 System.in 里面读取东西的管道,然后BufferedReader 就是比InputStreamReader 更高级的 更粗点的管道 可以嵌套在InputStreamReader的外面 从而实现缓冲功能 并且可以用外层管道的readLine()方法读取一行数据l依次类推 一种低级字节流管道的管道 我们可以在其外面嵌套一个更高级的数据流管道 从而更加方便的读写数据1、输入字符串、输入字符串【例3.3】从键盘输入数据。/app3_3.
33、java 由键盘输入字符串import java.io.*;/加载java.io类库里的所有类public class app3_3 public static void main(String args)throws IOException BufferedReader buf;String str;buf=new BufferedReader(new InputStreamReader(System.in);(”请输入字符串;”);str=buf.readLine();/将输入的文字指定给字符串变量str存放 (”您输入的字符串是:”+str);/输出字符串 2、输入数值、输入数值【例3.
34、4】从键盘输入数字转换为数值型数据。/app3_4.java 由键盘输入整数import java.io.*;public class app3_4 public static void main(String args)throws IOException float num;String str;BufferedReader buf;buf=new BufferedReader(new InputStreamReader(System.in);(”请输入一个实数:”);str=buf.readLine();/将输入的文字指定给字符串变量str存放 num=Float.parseFloat(
35、str);/将str转换成float类型后赋给num (”您输入的数为:”+num);3、输入多个数据、输入多个数据【例3.5】从键盘输入多个数据。/app3_5.java 由键盘输入多个数据import java.io.*;public class app3_5 public static void main(String args)throws IOException int num1,num2;String str1,str2;BufferedReader buf;buf=new BufferedReader(new InputStreamReader(System.in);(”请输入第
36、一个数:”);str1=buf.readLine();/将输入的内容赋值给字符串变量str1 num1=Integer.parseInt(str1);/将str1转成int类型后赋给num1 (”请输入第二个数”);str2=buf.readLine();/将输入的内容赋值给字符串变量str2 num2=Integer.parseInt(str2);/将str2转成int类型后赋给num2 System.out.println(num1+”*”+num2+”=”+(num1*num2);为了简化输入操作,从为了简化输入操作,从Java SE 5版本开始在版本开始在java.util类库中新增了
37、一个类专类库中新增了一个类专门用于输入操作的类门用于输入操作的类Scanner,可以使用该类输入一个对象,语句格式如下:,可以使用该类输入一个对象,语句格式如下:import java.util.*;public class class_name /类名称类名称 public static void main(String args)Scanner reader=new Scanner(System.in);double num;/声明声明double型变量,也可声明其他数值型变量型变量,也可声明其他数值型变量 num=reader.nextDouble();/调用调用reader对象的相应方
38、法,读取键盘数据对象的相应方法,读取键盘数据 格式2 【例3.6】利用Scanner类从键盘输入多个数据。/app3_6.java 由键盘输入多个数据import java.util.*;/加载java.util类库里的所有类public class app3_6 public static void main(String args)int num1;double num2;Scanner reader=new Scanner(System.in);(请输入第一个数:);num1=reader.nextInt();(请输入第二个数:);num2=reader.nextDouble();Sys
39、tem.out.println(num1+*+num2+=+(num1*num2);【例3.7】利用Scanner类从键盘输入多个字符串数据。/app3_7.java 由键盘输入多个数据import java.util.*;/加载java.util类库里的所有类public class app3_7 public static void main(String args)String s1,s2;Scanner reader=new Scanner(System.in);(请输入第一个数:);s1=reader.nextLine();(请输入第二个数:);s2=reader.next();(“
40、输入的是:”+s1+“和”+s2);/注意reader.nextLine()和reader.next()区别,见课本。3.7 运算符与表达式运算符与表达式运算符是用来表示某一种运算的符号,它指明运算符是用来表示某一种运算的符号,它指明了对操作数所进行的运算。按操作数的数目来分,了对操作数所进行的运算。按操作数的数目来分,可以有一元运算符可以有一元运算符(如如+)、二元运算符、二元运算符(如如+、)和和三元运算符三元运算符(如如?:),它们分别对应于一个、两个,它们分别对应于一个、两个和三个操作数。按照运算符功能来分,基本的运算和三个操作数。按照运算符功能来分,基本的运算符有下面几类。符有下面几
41、类。算术运算符算术运算符 +、-、*、/、%、+、-关系运算符关系运算符 、=、&、|、赋值运算符赋值运算符 =、及其扩展赋值运算符,如、及其扩展赋值运算符,如+=、/=等。等。条件运算符条件运算符?:其他运算符号其他运算符号 包括分量运算符包括分量运算符.、下标运算符、下标运算符、实例运算符、实例运算符instanceof、内存分配运算符、内存分配运算符new、强制类型转换运算符、强制类型转换运算符(类型类型)、方法调、方法调用运算符用运算符()等。等。instanceof是Java的一个二元操作符,和=,大于大于ab=大于或等于大于或等于a=b小于小于ab=小于或等于小于或等于a=b=等于
42、等于a=b!=不等于不等于a!=b表表3.10 关系运算符关系运算符逻辑运算与关系运算的关系非常密切,逻辑运算与关系运算的关系非常密切,关系运算是运算结果为布尔型量的运算,而关系运算是运算结果为布尔型量的运算,而逻辑运算是操作数与运算结果都是布尔型量逻辑运算是操作数与运算结果都是布尔型量的运算。逻辑运算符如表的运算。逻辑运算符如表3.11所示。所示。3.7.3 逻辑运算符逻辑运算符表表3.11 逻辑运算符逻辑运算符运算符运算符功功 能能示例示例运运 算算 规规 则则&逻辑逻辑与与a&b两个操作数均两个操作数均为为true时时,结结果才果才为为true。|逻辑逻辑或或a|b两个操作数均两个操作数
43、均为为false时时,结结果才果才为为false。!逻辑逻辑非(取反)非(取反)!a将操作数取反。将操作数取反。异或异或ab两个操作数同真或同假两个操作数同真或同假时时,结结果才果才为为false。&简洁简洁与与a&b两个操作数均两个操作数均为为true时时,结结果才果才为为true。|简洁简洁或或a|b两个操作数均两个操作数均为为false时时,结结果才果才为为false。【例3.8】关系运算符和逻辑运算符的使用。/app3_8.java 关系运算符和逻辑运算符的使用public class app3_8 public static void main(String args)int a=2
44、5,b=7;boolean x=ab;/x=false System.out.println(”a5;/y=true System.out.println(”xy=”+(xy);if(e!=0&b5)System.out.println(”a/f=”+a/f);else System.out.println(”f=”+f);其运行结果为:其运行结果为:a左移左移ab将将a 各比特位向右移各比特位向右移b位。位。右移右移a0填充右移填充右移ab将将a 各比特位向右移各比特位向右移b位,左位,左边边的空位一律填的空位一律填0。位运算及其应用位运算及其应用请掌握如下运算规则:l补码l按位取反运算l按
45、位与运算&l按位或运算|l按位异或运算l左移运算符l0填充右移运算符3.7.5 赋值运算符赋值运算符1 赋值运算符赋值运算符关于赋值运算符关于赋值运算符“=”,我们在,我们在3.4节介绍节介绍变量的赋值时已经简单提过。简单的赋值运算变量的赋值时已经简单提过。简单的赋值运算是把一个表达式的值直接赋给一个变量或对象,是把一个表达式的值直接赋给一个变量或对象,使用的赋值运算符是使用的赋值运算符是“=”,其格式如下:,其格式如下:变量或对象变量或对象=表达式表达式 赋值运算符右端的表达式可以还是赋值表赋值运算符右端的表达式可以还是赋值表达式,形成连续赋值的情况。例如:达式,形成连续赋值的情况。例如:a
46、=b=c=8;2扩展赋值运算符扩展赋值运算符在赋值符在赋值符“=”前加上其他运算符,即构成扩展前加上其他运算符,即构成扩展赋值运算符,例如:赋值运算符,例如:a+=3等价于等价于a=a+3。表表3.13列出了列出了Java中的扩展赋值运算符及等效的中的扩展赋值运算符及等效的表达式。表达式。表表3.13 扩展赋值运算符扩展赋值运算符运运 算算 符符示示 例例等等 效效 表表 达达 式式+=a+=ba=a+b-=a-=ba=a-b*=a*=ba=a*b/=a/=ba=a/b%=a%=ba=a%b&=a&=ba=a&b|=a|=ba=a|b=a=ba=ab=a=ba=ab=a=ba=a=a=ba=a
47、b条件运算符条件运算符Java语言提供了高效简便的三元条件运算符语言提供了高效简便的三元条件运算符(?:)。该运算符的格式如下:。该运算符的格式如下:?:其中其中“表达式表达式1”是一个结果为逻辑值的布尔表达是一个结果为逻辑值的布尔表达式。该运算符的功能是:先计算式。该运算符的功能是:先计算的值,当的值,当的值为的值为true时,则将时,则将的值作为的值作为整个表达式的值;当整个表达式的值;当的值为的值为false时,则将时,则将的值作为整个表达式的值。的值作为整个表达式的值。例如,例如,int a=1,b=2,max;maxa b?a:b;/max获得获得a,b之中的较大值之中的较大值Sys
48、tem.out.println(max=+max);/输出结果为输出结果为max2字符串运算符字符串运算符字符串运算符字符串运算符+是以是以String为对象实现。运算符为对象实现。运算符+完成字符串连接操作,如果必要,则系统自动把完成字符串连接操作,如果必要,则系统自动把操作数转换为操作数转换为String型。例如:型。例如:float a=100.0;/定义变量定义变量a为浮点型为浮点型print(The value of a is+a+n);/系统自动系统自动将将a转换成字符串转换成字符串3.7.8 表达式及运算符的优先级、结合性表达式及运算符的优先级、结合性 运算符的优先级决定了表达式
49、中不同运算执运算符的优先级决定了表达式中不同运算执行的先后顺序,大体上来说,从高到低是:一元行的先后顺序,大体上来说,从高到低是:一元运算符、算术运算、关系运算和逻辑运算、赋值运算符、算术运算、关系运算和逻辑运算、赋值运算。运算符除有优先级外,还有结合性,运算运算。运算符除有优先级外,还有结合性,运算符的结合性决定了并列的多个同级运算符的先后符的结合性决定了并列的多个同级运算符的先后执行顺序。同级的运算符大都是按从左到右的方执行顺序。同级的运算符大都是按从左到右的方向进行向进行(称为称为“左结合性左结合性”)。表表3.14给出了给出了Java中运算符的优先级和结合中运算符的优先级和结合性。性。
50、表3.14运算符的优先级及结合性(表顶部的优先级较高)优优先先级级运运 算算 符符运算符的运算符的结结合性合性1.()2+-!+(正号)(正号)-(负负号号)instanceof右右左左3new (类类型型)右右左左4*/%左左右右5+-(二元二元)左左右右6 左左右右7 =左左右右8=!=左左右右9&左左右右10左左右右11|左左右右12&左左右右13|左左右右14?:右右左左15=+=-=*=/=%=&=|=右右左左linstanceof是Java的一个二元操作符,和=,是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回