21第2章Java语言编程基础2.1Java语言词法词法是程序语言的基本构成方法,程序被编译时,要对程序的词法进行分析,Java语言是在C++基础上发展起来的,它继承了C和C++语言的语言特性,其基本词法相似,但Java语言采用Unicode字符集,又称统一字符集,用16位存储一个字符,它可以支持多种语言。为了解Java语言的词法构成,先来看一个例子。【引例】Java语言词法应用程序的例子。/**这是一个简单的Java语言程序*/publicclassclass1{/*下面是程序部分*/publicstaticvoidmain(Stringargs[])//调用main方法{/*下面是Java语言程序的一个简单例子*/intr[]={1,2,3,4,5},area;//定义数组变量r、area,并给r赋值for(inti=0,sum=0;i5;i++)//在循环中定义变量i,sum,并给i赋值{area=r[i]*r[i];//用乘法运算符求面积sum+=area;//用加法求和System.out.println(面积=+area);//输出面积System.out.println(和=+sum);//输出面积的和}}}该引例中包含Java语言最基本的词法。这些词法包括注释、关键词、标识符、常量、变量、分隔符等。1.注释通过本章的学习,掌握Java语言的基本词法、数据类型、运算符与表达式及基本程序控制结构,进而掌握Java程序的编程方法。通过技能实训,掌握一般Java程序的调试方法,达到熟练开发Java一般程序的目的。22在程序中加入注释是一个好的编程习惯,程序中加入合理的注释会增强程序的可读性,它不仅对程序调试和修改有益,而且更有利于程序的维护和移交。注释内容本身对程序的执行不产生任何影响,因而被编译器忽略。Java语言支持三种形式的注释,其中前两种与C++形式相同,而第三种是Java语言新增加的形式,它们分别是:(1)/*注释内容*//*和*/之间的所有字符均为注释,因而被编译器忽略。这种形式的注释可以扩展到多行,但不能嵌套。如引例中第3、5行。(2)//注释内容由//开始到行末的内容均为注释,因而被编译器忽略。这种形式的注释只能为一行。如引例中第4、6、7、9、10、11、12行。(3)/**注释内容*/这类注释出现在任何声明之前,被特殊处理,它们不能用在代码的其他任何地方。这类注释意味着被括起来的正文部分,应该作为声明项目的描述,并被包含在javadoc程序自动产生的文档中。在说明之前的任何位置处,凡是/**到*/之间的内容均为注释,因而被编译器忽略。如引例中第1行。2.关键词关键词是构成编程语言本身的符号,是一种特殊的标识符,又称保留字。引例中class、void、public、static、int、for等都是Java语言的关键词。Java语言的关键词有40多个,如表2-1所示:表2-1关键词表关键词abstractbooleanintinterfacebreakbytelongnativebyvaluecasepackageprivatecastclassprotectedpubliccontinuedefaultreturnshortdodoublestaticsuperfalsefinalswitchsynchronizedfinallyfloatthisthreadsafeforgoto*throwtransientifimplementstruetryimportinstanceofvoidwhile关键词在Java语言中,有其特殊的含义,不能用做一般的标识符使用,即一般的标识符(变量名、类名、方法名等)不能与其同名。true、false和null通常也被看成是关键词,其中true和false是布尔值,null用来表示空值。3.标识符标识符是能被编译器识别而提供的在程序中惟一的名字,可以是任意长度。引例中area,sum等都是Java语言合法的标识符。23构造一个标识符的名字,需要按照一定的规则。Java语言的标识符的命名规则是:(1)由字母、下划线(_)或美元符($)开头,同时由字母、0~9的数字、下划线(_)或美元符($)组成。(2)不能与关键词同名。例如:name_id,$fdsh,_es10为合法的标识符。name-id,Stuid*,6year,class为不合法的标识符。几点说明:(1)Java语言关键词不能用做普通的标识符使用。(2)标识符不宜过短,过短的标识符会导致程序的可读性变差;但也不宜过长,否则将增加录入工作量和出错的可能性。(3)为了增加程序的可读性,在Java语言程序中,用户定义的标识符一般以小写字母开头,而系统所定义的标识符大部分以大写字母开头,在使用中应加以注意,加以区分。4.常量常量是指直接用于程序中的、不能被程序修改的、固定不变的量。Java语言中的常量值是用数值或字符串表示的。Java语言常量包括整数、浮点数、布尔、字符、字符串五种类型。引例中数字0、1、2、3、4、5都是Java语言的整数常量。5.变量变量是指Java语言编程中合法的标识符,是用来存取某种类型值的存储单元,其中存储的值可以在程序执行的过程中被改变。在Java语言中用到的变量必须先定义后使用。对变量的定义就是给变量分配相应类型的存储空间。定义变量的一般形式为:[变量修饰符]变量类型说明符变量列表[=初值]其中:(1)变量修饰符是可选项,说明了变量的访问权限和某些规则,关于变量修饰符将在第3章详细讲解。(2)变量类型说明符,确定了变量的取值范围以及对变量所能进行的操作规范,关于变量类型将在第2节中详细讲解。(3)变量列表,由一个或多个变量名组成。当要定义多个变量时,各变量之间用逗号分隔。(4)初值是可选项,变量可以在定义的同时赋初值,也可以先定义,在后续程序中赋初值。变量名是程序引用变量的手段。Java语言中的变量名除了符合标识符的条件之外,还必须满足下列约定:24(1)变量名不能与关键词相同。(2)Java语言对变量名区分大小写。(3)变量名应具有一定的含义,以增加程序的可读性。Java语言变量包括整数、浮点数、布尔型、字符型四种类型。引例中intr[]={1,2,3,4,5},area定义了两个变量,r是整型数组变量,并赋了初值,area是整型变量。6.运算符运算符是一种特殊字符,又称操作符,是对变量或其他对象进行运算操作的特定符号。Java语言内部有44个运算符。运算符按其功能可以分为六类:算术操作、位操作、关系操作、逻辑操作、赋值操作和条件操作运算符。引例中area=r[i]*r[i]使用了Java语言的算术运算符“*”,sum+=area使用了Java语言的复合运算符“+=”。7.分隔符分隔符是Java语言中用作特定作用的字符或字符的组合,分隔符的主要作用是告诉编译器如何分隔和组合代码。Java语言中使用的分隔符共五种:“()”,“{}”,“[]”,“;”,“,”。(1)括号()括号“()”用来分隔表达式、组合表达式或表达式方法调用。引例中第4、7、11、12行都使用了括号。建议在复杂的表达式中多使用括号,以增强程序的可读性。(2)花括号{}花括号“{}”表示复合语句,即一个程序块的开始和结束。“{}”中所有部分表示一个类程序块。引例中第3行使用“{}”定义类,第5行使用“{}”定义方法,第8行使用“{}”定义一个循环程序段。(3)方括号[]方括号“[]”用来表示一维或多维数组的下标。引例第6行定义了一维数组r,并给r赋值,第9行调用了数组r。(4)逗号,逗号“,”用来分隔方法参数中的参数、同一类型变量的连续声明以及用于逗号表达式。引例中第7行的循环语句中使用了“,”作为变量分隔。(5)分号;分号“;”是语句的终止符,任何合法的Java语言表达式语句后面必须有分号,花括号后面没有分号。引例中每条语句的后面都有“;”。空格,制表符,换行符以及注释符是特殊的分隔符,用来分隔其他标记。2.2基本数据类型25数据类型指明变量或表达式的状态和行为,数据类型决定了数的取值范围和运算符号。在Java语言数据类型可以分为两大类:基本类型和引用类型。基本类型是指不能再分解的数据类型,其数据在函数的调用中是以传值方式工作的;引用类型有时也称复合类型,它是可以分解为基本类型的数据类型,其数据在函数调用中是以传址方式来工作的。本节主要介绍Java语言的基本数据类型及其类型的基本转换。为了解Java语言的基本数据类型,先来看一个例子。【引例】Java语言基本数据类型应用程序的例子。publicclassbasicdatatypes{publicstaticvoidmain(Stringargs[]){bytey,b=0x55;shorta,s=0x55ff;inte,i=1000000;longg,l=0xfffL;charj='1',c='c';floatk,f=0.23F;doublem,d=0.7E-3d;booleann,bool=true;e=(int)f;i+=j;}}该引例中包含了Java语言的基本数据类型。Java语言的基本数据类型包括整型、浮点数、字符型数据和布尔型数据。2.2.1整型⒈整数常量整数常量是不带小数的数值,用来表示正负数。引例中0x55、0x55ff、1000000都是Java语言的整数常量。Java语言的整数常量有三种形式:十进制、八进制、十六进制。(1)十进制整数是由不以0开头的0~9的数字组成的数据。(2)八进制整数是由以o开头的0~7的数字组成的数据。(3)十六进制整数是由以0x或0X开头的0~9的数字及A~F的字母组成的数据。例如:0,63,83是十进制数,o0,o77,o123是八进制数,260x0,0X0,0X53,0x53,0X3f,0x3f是十六进制数。整数常量的取值范围是有限的,它的大小取决于此类整型数的类型,与所使用的进制形式无关,它在机器中的表示为32位,当需要将一个整数说明为一个长整数时,则在整数后面加L或l,它在机器中表示是64位。引例中0xfffl即为长整数。⒉整型变量类型整型变量类型有byte、short、int、long四种说明符,都是有符号整型。(1)byte类型byte类型说明一个带符号的8位整型变量。由于不同的机器对于多字节数据的存储方式不同,可能是从低字节向高字节存储,也可能是从高字节向低字节存储,这样,在分析网络协议或文件格式时,为了解决不同机器上的字节存储顺序问题,用byte类型来表示数据是合适的。引例中第5行即说明了y和b均为byte类型变量。(2)short类型short类型说明一个带符号的16位整型变量。由于它限制了数据的存储应为先高字节,后低字节。引例中第6行即说明了a和s均为short类型变量。(3)int类型int类型说明一个带符号的32位整型变量。int类型是一种最丰富最有效的类型。它最常用于计数、数组访问和整数运算。引例中第7行即说明了e和i均为int类型变量。(4)long类型long类型说明一个带符号的64位整型变量。对于大型计算,常常会遇到很大的整数,并超出int所表示的范围,这时要使用long类型。引例中第8行即说明了g和l均为long类型变量。整数类型的取值范围变化很大,它们之间的差异如表2-2所示。表2-2整数类型的取值范围类型宽度取值范围long64-9223372036854775808~9223372036854775807Int32-2147483648~2147483647short16-32768~32767byte8-128~127⒊说明(1)在为byte和short类型分配内存空间时,Java语言运行器一律按32位分配,这是因为现在大多数机器字长为32位。(2)如果某一类型的变量放不下一个较大的值,该值就会被取模以使它处于合法的范围内。2.2.2浮点型⒈浮点数常量27浮点数是带有小数的十进制数,可用一般表示法或科学记数法表示。引例中0.23F、0.7E-3d都是J