Java语言实用教程第2章.ppt
第第2章章 Java基本语法基本语法2.1 Java语言的基本元素语言的基本元素2.2 数据类型数据类型2.3 运算符与表达式运算符与表达式2.4 数组数组习题习题例例2.1 编编写写一一个个简简单单的的Java Application源源程程序序:Welcome2.java。程程序序的的运运行行结结果果是是输输出出一一句句话话“欢欢迎使用迎使用Java2”,如图如图2.1所示。所示。/这是一个简单的这是一个简单的JavaApplication源程序源程序classWelcome2publicstaticvoidmain(Stringargs)System.out.println(欢迎使用欢迎使用Java2);/结束结束main方法定义方法定义/结束类结束类Welcome2定义定义2.1Java语言的基本元素语言的基本元素图图2.1可以知道可以知道Java语言包含标识符、关键字、运算符和分语言包含标识符、关键字、运算符和分隔符等元素。这些元素有着不同的语法含义和组成规隔符等元素。这些元素有着不同的语法含义和组成规则,它们互相配合,共同组成则,它们互相配合,共同组成Java的语句。的语句。在在Java中中,变变量量以以及及类类和和方方法法都都需需要要一一定定的的名名称称,这这种种名名称称就就叫叫做做标标识识符符。所所有有的的标标识识符符都都必必须须是是以以一一个个字字母母、下下划划线线或或美美元元符符号号“$”开开头头的的一一串串字字符符,后后面的字符可以包含字母、数字、下划线和美元符号。面的字符可以包含字母、数字、下划线和美元符号。表表2.1标识符命名正误对照表标识符命名正误对照表2.1.1标识符标识符合法标识符合法标识符非法标识符非法标识符合法标识符合法标识符非法标识符非法标识符MyClassclassi2anIntintONE_HUNDREDONE-HUNDREDgroup77group标识符是由程序员自己定义的名称,可按上面的规则标识符是由程序员自己定义的名称,可按上面的规则随意选取。不过,随意选取。不过,Java中有一个标识符命名约定:中有一个标识符命名约定:常量用大写字母,变量用小写字母开始,类以大写字常量用大写字母,变量用小写字母开始,类以大写字母开始。如果一个变量名由多个单词构成,第一个单母开始。如果一个变量名由多个单词构成,第一个单词后面的单词以大写字母开始,例如词后面的单词以大写字母开始,例如anInt。下划线下划线虽然可以作为标识符的一员,但常用于常量名的单词虽然可以作为标识符的一员,但常用于常量名的单词分隔,因为常量名都是以大写字母单词命名的。还要分隔,因为常量名都是以大写字母单词命名的。还要注意一点,注意一点,Java严格区分字母大小写,标识符中的大严格区分字母大小写,标识符中的大小写字母被认为是不同的两个字符。例如以下是小写字母被认为是不同的两个字符。例如以下是4个个不同的合法标识符:不同的合法标识符:ad、Ad、aD、Da。关键字是关键字是Java语言本身使用的标识符,它有其特定的语言本身使用的标识符,它有其特定的语法含义,如语法含义,如public表示公有的,表示公有的,static为静态的。所为静态的。所有的有的Java关键字将不能被用作标识符,如关键字将不能被用作标识符,如for、while、boolean等都是等都是Java语言的关键字。关键字用英文小语言的关键字。关键字用英文小写字母表示,参见表写字母表示,参见表2.2。2.1.2关键字关键字表表2.2Java关键字关键字注:注:带带*号的关键字现在已不使用。号的关键字现在已不使用。abstractdefaultgoto*nullswitchbooleandoifpackagesynchronizedbreakdoubleimplementsprivatethisbyteelseimportprotectedthrow/throwscaseextendsinstanceofpublictransientcatchfalseintreturntruecharfinalinterfaceshorttryclassfinallylongstaticvoidconst*floatnativestrictfpvolatilecontinuefornewsuperwhile1.注释符注释符注注释释是是程程序序员员为为了了提提高高程程序序的的可可读读性性和和可可理理解解性性,在在源源程程序序的的开开始始或或中中间间对对程程序序的的功功能能、作作者者、使使用用方方法法等等所所写写的的注注解解。注注释释仅仅用用于于阅阅读读源源程程序序,系系统统编编译译程程序时,忽略其中的所有注释。注释有两种类型:序时,忽略其中的所有注释。注释有两种类型:(1)/注释一行。注释一行。以以“/”开开始始,最最后后以以回回车车结结束束。一一般般作作单单行行注注释释使使用,可放在某个语句的后面。用,可放在某个语句的后面。(2)/*/一行或多行注释。一行或多行注释。以以“/*”开始,最后以开始,最后以“*/”结束,中间可写多行。结束,中间可写多行。2.1.3分隔符分隔符2.空白符空白符空白符包括空格、回车、换行和制表符(空白符包括空格、回车、换行和制表符(Tab键)等键)等符号,用来作为程序中各种基本成份之间的分隔符。符号,用来作为程序中各种基本成份之间的分隔符。各基本成份之间可以有一个或多个空白符,其作用相各基本成份之间可以有一个或多个空白符,其作用相同。系统编译程序时,只用空白符区分各种基本成份,同。系统编译程序时,只用空白符区分各种基本成份,然后忽略它。然后忽略它。3.普通分隔符普通分隔符普普通通分分隔隔符符和和空空白白符符的的作作用用相相同同,用用来来区区分分程程序序中中的的各各种种基基本本成成份份,但但它它在在程程序序中中有有确确定定的的含含义义,不不能能忽忽略。略。Java有以下普通分隔符:有以下普通分隔符:.点点号号,用用于于分分隔隔包包、类类或或分分隔隔引引用用变变量量中中的的变变量量和和方法;方法;分号,是分号,是Java语句结束的标志;语句结束的标志;,逗号,分隔方法的参数和变量说明等;逗号,分隔方法的参数和变量说明等;:冒号,说明语句标号;冒号,说明语句标号;大大括括号号,用用来来定定义义复复合合语语句句、方方法法体体、类类体体及及数数组的初始化;组的初始化;方方括括号号,用用来来定定义义数数组组类类型型及及引引用用数数字字的的元元素素值;值;()()圆括号,用于在方法定义和访问中将参数表括圆括号,用于在方法定义和访问中将参数表括起来,或在表达式中定义运算的先后次序。起来,或在表达式中定义运算的先后次序。例例2.2标识符、关键字和分隔符的使用。标识符、关键字和分隔符的使用。publicclassExamplepublicstaticvoidmain(Stringargs)inti,c;.Java是是严严格格区区分分数数据据类类型型的的语语言言,要要求求在在程程序序中中使使用用任任何何变变量量之之前前必必须须声声明明其其类类型型。数数据据类类型型说说明明了了常常量量、变变量量或或表表达达式式的的性性质质。只只有有数数据据类类型型相相同同的的常常量量、变变量才可以进行运算。量才可以进行运算。Java的的基基本本数数据据类类型型长长度度是是固固定定的的。例例如如int类类型型在在任任何何计计算算机机上上的的长长度度都都是是32b(4B),这这就就使使得得Java的的基基本本数数据据类类型型可可以以跨跨平平台台自自由由移移植植。Java的的char类类型型采采用用了了国国际际编编码码标标准准Unicode,每每个个码码有有16位位(2B),可可容容纳纳65 536个个字字符符,有有效效地地解解决决了了用用ASCII双双字字节节码码表表示示东东方方文文字字带带来来的的诸诸多多不不便便,使使Java处理多语种的能力大大加强。处理多语种的能力大大加强。2.2数据类型数据类型Java的数据类型可分为:的数据类型可分为:基本类型,包括整型、浮点型、布尔型和字符型;基本类型,包括整型、浮点型、布尔型和字符型;数组类型,包括一维数组和多维数组;数组类型,包括一维数组和多维数组;复合类型,包括类和接口。复合类型,包括类和接口。表表2.3给给出出了了Java基基本本数数据据类类型型。Java定定义义了了8种种基基本本数数据据类类型型,利利用用基基本本数数据据类类型型可可以以构构造造出出复复杂杂数数据据结结构来满足构来满足Java程序的各种需要。程序的各种需要。注意:注意:一般情况下,没有小数点的数字是一般情况下,没有小数点的数字是int型数,型数,带有小数点的数是带有小数点的数是double型的数,其他数值数据要在型的数,其他数值数据要在数字后面加一个大写或小写字母表示数据类型。例如数字后面加一个大写或小写字母表示数据类型。例如4L是是long型,型,3.14f是是float型。型。2.2.1基本数据类型基本数据类型表表2.3Java基本数据类型基本数据类型数据类型数据类型名称名称位长位长/b默认值默认值取取值值范范围围布尔型布尔型boolean1falsetrue,false字节型字节型byte80-128127字符型字符型char16u0000u0000uffff短整型短整型short160-3276832767整型整型int320-21474836482147483647长整型长整型long640-92233720368547758089223372036854775807浮点型浮点型float320.01.4E-45或或3.4028235E+38双精度型双精度型double640.04.9E-324或或1.7976931348623157E+308直接量(直接量(literal)是指在程序中直接给出的一个符号是指在程序中直接给出的一个符号串,作用是为变量赋值或参与表达式运算。直接量可串,作用是为变量赋值或参与表达式运算。直接量可以是一个具体的数值或字符串,也称常量。但以是一个具体的数值或字符串,也称常量。但Java中中的常量另有所指,是用的常量另有所指,是用final说明的一个标识符,在很说明的一个标识符,在很多教科书中往往不加区分地统称为常量。将一个标识多教科书中往往不加区分地统称为常量。将一个标识符说明为常量,然后赋予它一个直接量,就在二者之符说明为常量,然后赋予它一个直接量,就在二者之间画上了等号。直接量或常量在程序执行过程中是不间画上了等号。直接量或常量在程序执行过程中是不可更改的,它们与变量的区别是不占用内存。可更改的,它们与变量的区别是不占用内存。Java约约定常量标识符全部使用大写字母。定常量标识符全部使用大写字母。2.2.2直接量与常量直接量与常量1.布尔常量布尔常量布尔常量只有两个值布尔常量只有两个值true和和false,代表了两种状态:代表了两种状态:真和假,书写时直接使用真和假,书写时直接使用true和和false这两个英文单词,这两个英文单词,不能加引号。不能加引号。2.整型常量整型常量整整型型常常量量是是不不含含小小数数的的整整数数值值,书书写写时时可可采采用用十十进进制制、十十六六进进制制和和八八进进制制形形式式。十十进进制制常常量量以以非非0开开头头后后跟跟多多个个09之之间间的的数数字字;八八进进制制以以0开开头头后后跟跟多多个个07之之间间的的数数字字;十十六六进进制制则则以以0 x开开头头后后跟跟多多个个09之之间间的的数数字字或或af之之间间的的小小写写字字母母或或AF之之间间的的大大写写字字母。母。下面是下面是3条赋值语句:条赋值语句:finalintI=15;finalintJ=017;finalintK=0 xF;整型常量默认为整型常量默认为32位的位的int型,如果在数值后边加上型,如果在数值后边加上L或或l,则表示为则表示为64位的长整型。位的长整型。3.浮点型常量浮点型常量Java的浮点型常量有两种表示形式:的浮点型常量有两种表示形式:(1)十十进进制制数数形形式式,由由数数字字和和小小数数点点组组成成,且且必必须须有小数点,如有小数点,如.123、0.123、123.0;(2)科科学学计计数数法法形形式式,如如123e3或或123E-3,其其中中e或或E之前必须有数,且之前必须有数,且e或或E后面的指数必须为整数。后面的指数必须为整数。对于一个浮点数,加上对于一个浮点数,加上f或或F后缀,就是单精度浮点数;后缀,就是单精度浮点数;加上加上d或或D后缀,就是双精度浮点数。不加后缀的浮后缀,就是双精度浮点数。不加后缀的浮点数被默认为双精度浮点数,双精度浮点数在计算机点数被默认为双精度浮点数,双精度浮点数在计算机中占中占64位,有很高的精度。位,有很高的精度。4.字符常量字符常量字字符符常常量量是是由由一一对对单单引引号号括括起起来来的的单单个个字字符符。它它可可以以是是Unicode字字符符集集中中的的任任意意一一个个字字符符,如如a和和Z。对对无无法法通通过过键键盘盘输输入入的的字字符符,可可用用转转义义符符表表示示,参参见见表表2.4。表表2.4转义符号表转义符号表字符常量的另外一种表示就是直接写出字符编码,如字符常量的另外一种表示就是直接写出字符编码,如字母字母A的八进制表示为的八进制表示为101,十六进制表示为,十六进制表示为u0041。转义符号转义符号Unicode编码编码功功能能转义符号转义符号Unicode编码编码功功能能bu0008退格退格fu000c进纸进纸ru000d回车回车u0027单引号单引号nu000a换行换行u0022双引号双引号tu0009水平制表符水平制表符u005c反斜杠反斜杠5.字符串常量字符串常量字字符符串串常常量量是是用用一一对对双双引引号号括括起起来来的的字字符符序序列列。当当字字符符串串只只包包含含一一个个字字符符时时,不不要要把把它它和和字字符符常常量量混混淆淆,例例如如A是是字字符符常常量量,而而A是是字字符符串串常常量量。字字符符串串常常量量中中可可包包含含转转义义字字符符,例例如如 Hello nworld!在在中中间间加加入入了了一一个个换换行行符符,输输出出时时,这这两两个个单词将显示在两行上。单词将显示在两行上。声明常量的格式:声明常量的格式:final类型类型常量名常量名,常量名常量名=值,值,;变量在程序中为一个标识符,在内存中是一块空间,变量在程序中为一个标识符,在内存中是一块空间,它提供了一个临时存放信息和数据的地方,具有记忆它提供了一个临时存放信息和数据的地方,具有记忆数据的功能。变量的值是可以改变的,它可以存放不数据的功能。变量的值是可以改变的,它可以存放不同类型的数据,通常用小写字母或单词作为变量名。同类型的数据,通常用小写字母或单词作为变量名。变量具有变量具有3个元素:个元素:名字、类型和值。名字、类型和值。2.2.3变量变量1.变量的声明变量的声明在在Java中中存存储储一一个个数数据据,必必须须将将它它保保存存到到一一个个变变量量中中。变变量量在在使使用用前前必必须须有有定定义义,即即有有确确定定的的类类型型和和名名称称。声明变量的格式为:声明变量的格式为:类型类型变量名变量名,变量名变量名=初值初值,;变变量量声声明明告告诉诉编编译译器器以以给给定定的的数数据据类类型型和和变变量量名名创创建建一一个个变变量量;可可以以一一次次声声明明多多个个变变量量,并并同同时时赋赋初初值值。例如:例如:byteb1,b2;intv1=0,v2=10,v3=18;例例2.3变变量量声声明明示示例例。使使用用SDK编编译译并并运运行行该该程程序序,结果如图结果如图2.2所示。所示。publicclassVpublicstaticvoidmain(Stringargs)byteb=0 x55;shorts=0 x55ff;inti=1000000;longl=0 xffffL;charc=c;floatf=0.23F;doubled=0.7E-3;booleanB=true;StringS=Thisisastring;System.out.println(字节型变量字节型变量b=+b);System.out.println(短整型变量短整型变量s=+s);System.out.println(整型变量整型变量i=+i);System.out.println(长整型变量长整型变量l=+l);System.out.println(字符型变量字符型变量c=+c);System.out.println(浮点型变量浮点型变量f=+f);System.out.println(双精度变量双精度变量d=+d);System.out.println(布尔型变量布尔型变量B=+B);System.out.println(字符串类对象字符串类对象S=+S);图图2.22.变量的使用范围变量的使用范围声声明明一一个个变变量量后后,它它将将被被引引入入到到一一个个范范围围当当中中。也也就就是是说说,该该变变量量只只能能在在程程序序的的特特定定范范围围内内使使用用,出出了了这这个范围,变量就消失了。个范围,变量就消失了。在类中声明的变量称为成员变量,通常在类的开始处在类中声明的变量称为成员变量,通常在类的开始处声明,可在整个类中使用。在方法和块中声明的变量声明,可在整个类中使用。在方法和块中声明的变量叫局部变量,使用范围是从它声明的地方开始到它所叫局部变量,使用范围是从它声明的地方开始到它所在那个块的结束处,块是由两个大括号所定义的,如在那个块的结束处,块是由两个大括号所定义的,如例例2.4所示。所示。例例2.4变量的使用范围。变量的使用范围。publicclassV2staticinti=10;publicstaticvoidmain(Stringargs)intk=10;System.out.println(i=+i);System.out.println(k=+k);System.out.println(k=+k);/编译时将出错,已出编译时将出错,已出k的使用范围的使用范围编编译译程程序序V2.java时时会会出出现现错错误误,如如图图2.3所所示示。因因为为变变量量k在在方方法法块块中中声声明明,在在方方法法块块之之外外它它是是不不存存在在的的,所以编译时会出错。所以编译时会出错。图图2.33.变量类型的转换变量类型的转换当当需需要要把把一一个个整整数数变变成成一一个个字字符符型型数数据据使使用用时时可可以以将将整数类型数据强制转换为字符型数据。整数类型数据强制转换为字符型数据。变量类型强制转换的格式为:变量类型强制转换的格式为:(数据类型)数据表达式(数据类型)数据表达式例如,下面的语句将字符型数据转换为整型数据:例如,下面的语句将字符型数据转换为整型数据:inta;charb;b=A;a=(int)b;对对于于数数值值型型数数据据,Java可可以以将将低低精精度度的的数数字字赋赋值值给给高高精精度度的的数数字字型型变变量量,反反之之则则需需要要进进行行强强制制类类型型转转换换,例例如如将将int,short,byte赋赋值值给给long型型时时不不需需要要显显式式的的类类型型转转换换,如如doublet=0.9F。反反之之,将将long型型数数赋赋值给值给byte,short,int型时需要强制转换型时需要强制转换inta=(int)123L。Java不不允允许许自自动动类类型型转转换换,当当你你进进行行类类型型转转换换时时,要要注意使目标类型能够容纳原类型的所有信息。注意使目标类型能够容纳原类型的所有信息。记记住住整整型型和和字字符符型型变变量量位位长长是是不不同同的的,整整型型是是32位位,而而字字符符型型是是16位位,所所以以从从整整型型转转换换到到字字符符型型可可能能会会丢丢失信息。失信息。同样,把同样,把64位的长整型数转换为整型数时,由于长整位的长整型数转换为整型数时,由于长整型有比型有比32位更多的信息,也很可能会丢失信息。即使位更多的信息,也很可能会丢失信息。即使两个数有相同的位数,比如整型和浮点型(都是两个数有相同的位数,比如整型和浮点型(都是32位)位),从浮点型转换为整型时也会丢失信息。,从浮点型转换为整型时也会丢失信息。表表2.5不会丢失信息的类型转换不会丢失信息的类型转换原始类型原始类型目目标标类类型型原始类型原始类型目目标标类类型型byteshort,char,int,long,float,doubleintlong,float,doubleshortint,long,float,doublelongfloat,doublecharint,long,float,doublefloatdoubleJava的的运运算算符符代代表表着着特特定定的的运运算算指指令令,程程序序运运行行时时将将对对运运算算符符连连接接的的操操作作数数进进行行相相应应的的运运算算。运运算算符符和和操操作作数数的的组组合合构构成成表表达达式式,表表达达式式代代表表着着一一个个确确定定的的数数值值。表表达达式式在在使使用用上上总总是是先先计计算算后后使使用用,因因此此,不不管管一一个个表表达达式式有有多多么么复复杂杂,其其最最终终结结果果都都是是一一个个有有确确定定类型和大小的数值。类型和大小的数值。按按照照运运算算符符功功能能来来分分,运运算算符符有有7种种:赋赋值值运运算算符符、算算术术运运算算符符、关关系系运运算算符符、条条件件运运算算符符、逻逻辑辑运运算算符符、位运算符和其他运算符。位运算符和其他运算符。按照连接操作数的多少来分,有一元运算符、二元运按照连接操作数的多少来分,有一元运算符、二元运算符和三元运算符。另外,算术运算符和赋值运算符算符和三元运算符。另外,算术运算符和赋值运算符可以结合在一起形成算术赋值运算符。可以结合在一起形成算术赋值运算符。2.3运算符与表达式运算符与表达式表表2.6给给出出了了赋赋值值运运算算符符和和功功能能说说明明(未未列列出出包包含含位位运算符的赋值运算符)。运算符的赋值运算符)。表表2.6赋值运算符赋值运算符2.3.1赋值运算符赋值运算符运算符运算符功功能能举举例例等价于等价于=右边数赋给左边变量右边数赋给左边变量x=5,5赋给赋给x+=左右两边数相加左右两边数相加,结果赋给左变量结果赋给左变量x=5,x+=10将将15赋给赋给xx=x+10-=左右两边数相减左右两边数相减,结果赋给左变量结果赋给左变量x=5,x-=10将将-5赋给赋给xx=x-10*=左右两边数相乘左右两边数相乘,结果赋给左变量结果赋给左变量x=5,x*=10将将50赋给赋给xx=x*10/=右边数除左边数右边数除左边数,结果赋给左变量结果赋给左变量x=5,x/=5将将1赋给赋给xx=x/5%=右边数除左边数右边数除左边数,余数赋给左变量余数赋给左变量x=25,x%=7将将4赋给赋给xx=x%7由赋值运算符构成的表达式称为赋值表达式。赋值运由赋值运算符构成的表达式称为赋值表达式。赋值运算符的右边是一个表达式,这个表达式还可以包含一算符的右边是一个表达式,这个表达式还可以包含一个表达式。例如:个表达式。例如:a=b=c=0,相当于相当于3个表达式个表达式c=0,b=c,a=b。表表2.7给出了算术运算符和功能说明。给出了算术运算符和功能说明。算算术术运运算算符符按按操操作作数数的的多多少少可可分分为为一一元元运运算算符符和和二二元元运运算算符符。一一元元运运算算符符(+、-、+、-)一一次次对对一一个个操操作作数数进进行行运运算算,二二元元运运算算符符一一次次对对两两个个操操作作数数进进行行运算。运算。求求余余运运算算在在判判断断两两个个数数是是否否成成倍倍数数时时很很有有用用,余余数数为为0则两数成倍数,否则两数不成倍数。则两数成倍数,否则两数不成倍数。一元运算一元运算i+和和i-比传统写法的加减运算速度要快很比传统写法的加减运算速度要快很多,常用作循环结构中的计数器。多,常用作循环结构中的计数器。2.3.2算术运算符算术运算符表表2.7算术运算符算术运算符运运 算算符符功能功能举例举例说说明明-取负取负-x单目运算单目运算,将将x取负值取负值+加加1i+单目运算单目运算,等价于等价于i=i+1-减减1i-单目运算单目运算,等价于等价于i=i-1*乘乘5*315/除除5/31整数相除取商的整数部分整数相除取商的整数部分%求余求余5%32两数相除取余数两数相除取余数+加加5+38-减减5-32有有一一些些运运算算符符能能产产生生布布尔尔类类型型的的结结果果,称称它它们们为为关关系系运算符,表运算符,表2.8列出了这些运算符。列出了这些运算符。表表2.8关系运算符关系运算符2.3.3关系运算符关系运算符运运 算算符符含义含义举举例例说说明明大于大于Aafalsea的编码值大于的编码值大于A的编码值的编码值小于小于A=大大 于于 等等于于5=3true=小小 于于 等等于于5b)result=a-b;elseresult=b-a;其中的分支结构可改写为:其中的分支结构可改写为:result=ab?a-b:b-a;表表2.9逻辑运算符逻辑运算符2.3.5逻辑运算符逻辑运算符运算符运算符含义含义举举例例说说明明!逻辑非逻辑非!(3=5)true将将表表达达式式的的值值true变变false,false变变true&逻辑与逻辑与(34)true仅仅当当两两个个表表达达式式都都为为true时时才才为为true|逻辑或逻辑或(35)|(64)false仅仅当当两两个个表表达达式式都都为为false时时才才为为false逻辑异或逻辑异或(35)(64)true仅当两个表达式值相异时才为仅当两个表达式值相异时才为true&布尔逻辑与布尔逻辑与同同&在表达式计算上与在表达式计算上与&不同不同|布尔逻辑或布尔逻辑或同同|在表达式计算上与在表达式计算上与|不同不同关关系系运运算算只只能能解解决决一一些些简简单单条条件件的的判判定定问问题题,对对较较为为复复杂杂的的条条件件可可用用逻逻辑辑运运算算来来判判定定。逻逻辑辑表表达达式式通通常常由由多多个个关关系系表表达达式式构构成成,最最终终运运算算结结果果为为布布尔尔值值true或或false。“&”连连接接的的两两个个表表达达式式中中,只只要要有有一一个个不不为为true,则则整整个个表表达达式式就就为为false。运运算算时时只只要要判判定定左左边边表表达达式式为为false,就就可可立立即即得得出出结结论论,不不再再计计算算右右边边表表达达式式。所所以以,最最有有可可能能取取false值值的的表表达达式式尽尽量量放放在在左左边边,这这样可提高表达式的运算速度。样可提高表达式的运算速度。“&”在在表表达达式式判判定定上上和和“&”相相同同,惟惟一一不不同同的的是是它总是计算两边表达式的值。它总是计算两边表达式的值。“|”连连接接的的两两个个表表达达式式中中,只只要要有有一一个个为为true,则则整整个个表表达达式式就就为为true。运运算算时时只只要要判判定定左左边边表表达达式式为为true,就就可可立立即即得得出出结结论论,不不再再计计算算右右边边表表达达式式。所所以以,最最有有可可能能取取true值值的的表表达达式式尽尽量量放放在在左左边边,以以提提高表达式的运算速度。高表达式的运算速度。“|”在在表表达达式式判判定定上上和和“|”相相同同,不不同同之之处处是是它它总是计算两边表达式的值。总是计算两边表达式的值。“”逻辑异或连接的两个表达式同为逻辑异或连接的两个表达式同为true或同为或同为false时,整个表达式结果为时,整个表达式结果为false,其他情况下取其他情况下取true。例例2.5下下面面的的程程序序说说明明了了关关系系运运算算符符和和逻逻辑辑运运算算符符的的使用方式,其输出结果如图使用方式,其输出结果如图2.4所示。所示。publicclassRALpublicstaticvoidmain(Stringargs)inta=25,b=3,e=3,f=0;booleand=ab;System.out.println(a=25,b=3,e=3,f=0);System.out.println(a5)System.out.println(a/e=+a/e);if(f!=0&a/f5)System.out.println(a/f=+a/f);elseSystem.out.println(f=+f);图图2.4以以上上是是常常见见的的分分类类运运算算符符,在在Java中中还还有有一一些些特特殊殊的的运算符,如表运算符,如表2.10所示。所示。表表2.10其他运算符其他运算符2.3.6其他运算符其他运算符符符号号功功能能()表达式加括号则优先运算表达式加括号则优先运算(参数表参数表)方法的参数传递,多个参数时用逗号分隔方法的参数传递,多个参数时用逗号分隔(类型类型)强制类型转换强制类型转换.分量运算符,用于对象属性或方法的引用分量运算符,用于对象属性或方法的引用下标运算符,引用数组元素下标运算符,引用数组元素instanceof对象运算符,用于测试一个对象是否是一个指定类的实例对象运算符,用于测试一个对象是否是一个指定类的实例new对象实例化运算符,实例化一个对象,即为对象分配内存对象实例化运算符,实例化一个对象,即为对象分配内存+字符串合并运算符,如字符串合并运算符,如Hello+World!等于等于HelloWorld!表表2.11从高到低列出了运算符的优先级,同一行中的从高到低列出了运算符的优先级,同一行中的运算符优先级相同。运算符优先级相同。不论任何时候,当你一时无法确定某种计算的执行次不论任何时候,当你一时无法确定某种计算的执行次序时,可以使用加括号的方法明确为编译器指定运算序时,可以使用加括号的方法明确为编译器指定运算顺序,这也是提高程序可读性的一个重要方法。顺序,这也是提高程序可读性的一个重要方法。2.3.7运算优先级运算优先级表表2.11运算符的优先级运算符的优先级1.()expr+expr-2+expr-expr!-3new(type)4*/%5+-6=instanceof7=!=8&910|11&12|13?:14=opr=数组是有序数据的集合,数组中的每个元素具有相同数组是有序数据的集合,数组中的每个元素具有相同的数组名,根据数组名和下标来惟一地确定数组中的的数组名,根据数组名和下标来惟一地确定数组中的元素。数组有一维数组和多维数组,使用时要先声明元素。数组有一维数组和多维数组,使用时要先声明后创建。后创建。2.4数组数组数数组组是是Java语语言言中中的的特特殊殊数数据据类类型型,它它们们保保存存着着能能通通过过下下标标索索引引来来引引用用的的一一组组同同类类数数据据。一一维维数数组组是是指指一一个线性数据序列,声明格式为:个线性数据序列,声明格式为:数据类型数据类型数组名数组名;或或数据类型数据类型数组名数组名;例如:例如:intarr1;chararr2;Java在在数数组组的的定定义义中中并并不不为为数数组组元元素素分分配配内内存存,因因此此“”中中不不用用指指出出数数组组中中元元素素的的个个数数即即数数组组长长度度,而而且且对对于于如如上上定定义义的的一一个个数数组组暂暂时时还还不不能能访访问问它它的的任任何元素。何元素。2.4.1一维数组的声明一维数组的声明定义数组后,还必须为数组分配内存、初始化。定义数组后,还必须为数组分配内存、初始化。1.用运算符用运算符new分配内存再赋值分配内存再赋值格式如下:格式如下:数组名数组名=new数据类型数据类型size其中,其中,size指明数组的长度。例如:指明数组的长度。例如:intintArr=newint3;charchArr=newchar5;数组元素赋值的方法与变量相同,例如:数组元素赋值的方法与变量相同,例如:intArr0=10;intArr1=20;intArr2=30;2.4.2一维数组的创建与赋值一维数组的创建与赋值2.直接赋初值并定义数组的大小直接赋初值并定义数组的大小第第二二种种方方法法是是直直接接赋赋初初值值并并定定义义数数组组的的大大小小。初初值值必必须须用用大大括括号号括括起起,用用逗逗号号作作分分隔隔符符,初初值值的的个个数数表表示示数组的大小。例如:数组的大小。例如:inta=1,2,3,4,5,6,7,8,9,10;charc=a,b,c,北北,京京例例2.6一一维维数数组组的的使使用用。该该程程序序对对数数组组中中的的每每个个元元素素赋值,结果如图赋值,结果如图2.5所示。所示。publicclassA1publicstaticvoidmain(Stringargs)inta=newint5;a0=1;a1=2;a2=3;a3=4;a4=5;System.out.println(a+0+=+a0);System.out.println(a+1+=+a1);System.out.println(a+2+=+a2);System.out.println(a+3+=+a3);System.out.println(a+4+=+a4);图图2.5Java将将多多维维数数组组看看作作数数组组的的数数组组。例例如如二二维维数数组组就就是是一个特殊的一维数组,它的每个元素是一个一维数组。一个特殊的一维数组,它的每个元素是一个一维数组。二二维维数数组组的的声声明明与与一一维维数数组组基基本本相相同同,只只是是后后面面再再加加上上一一对对中中括括号号“”。创创建建二二维维数数组组时时,可可指指定定各各维维的的长长度度或或至至少少指指定定第第一一维维的的长长度度,也也可可采采用用直直接接赋赋值值的的方方法法确确定定二二维维数数组组的的长长度度。此此时时,按按照照给给定定的的值值序序依依次次填填满满数数组组每每一一行行中中的的元元素素。更更高高维维的的情情况况是是类类似的。下面以二维数组为例来进行说明。例如:似的。下面以二维数组为例来进行说明。例如:2.4.3多维数组多维数组intarr1=newint34;intarr2=newint3;intarr3=0,1,2,3,4,5,6,7,8;Java中二维数组有一个好处是第二维的长度可以不相中二维数组有一个好处是第二维的长度可以不相等。例如等。例如arr2的第二维长度可以分别选取为的第二维长度可以分别选取为3、4、5,适用于数组元素不等的情况。,适用于数组元素不等的情况。2-1Java有哪些基本数据类型?有哪些基本数据类型?2-2float和和double型数据在赋值时有哪些注意事项?型数据在赋值时有哪些注意事项?2-3Java的字符常量和字符串常量有何区别?的字符常量和字符串常量有何区别?2-4数据类型转换有何作用?数据类型转换有何作用?2-5说说明明System.out.println(Thischaracter+A+hasthevalue:+(int)A)的输出结果。的输出结果。2-6说明表达式说明表达式3*9*(3+(9*3/(-3)的计算次序。的计算次序。2-7计计算算表表达达式式的的值值:x+a%3*(int)(x+y)%2/4,设设x=2.5,a=7,y=4.7。习题习题2-8设设x的值为的值为10,写出表达式运算后,写出表达式运算后x的值:的值:x+=xx-=3x*=1+2x%=52-9设设a=6、b=-4,计算表达式的值:计算表达式的值:-a%+b(-a)a(a10?a:b)2-10指指出出下下面面哪哪些些是是合合法法的的标标识识符符,说说出出为为什什么么。(ABE)A.$persons。B.TwoUsers。C.*point。D.this。E._endline。2-11指指出出下下面面哪哪些些是是将将一一个个十十六六进进制制值值赋赋值值给给一一个个long型变量,说出为什么。(型变量,说出为什么。(D)A.longnumber=345L;B.longnumber=0345;C.longn