第2章Java基本语法.docx
《第2章Java基本语法.docx》由会员分享,可在线阅读,更多相关《第2章Java基本语法.docx(37页珍藏版)》请在三一文库上搜索。
1、第2章JaVa基本语法通过第1章的学习,我们已经掌握了JaVa开发环境的安装、配置,并且通过例1.1学习了如何编写、编译以及运行一个最简单的Java应用程序。本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。在本章中,我们使用下面的编程框架:publicclassTestSketchpublicstaticvoidmain(Stringargs)/以下添加测试代码)读者如果需要测试各小节中讲解的语句,用待测试的语句覆盖编程框架中的省略号,然后编译运行即可。2.1 变量所谓变量,就是由标识符命名的数据项。每个变量都必须声明数据类型
2、变量的数据类型决定了它所能表示值的类型以及可以对其进行什么样的操作。变量既可以表示基本数据类型(如整型int、字符型char等)的数据,也可以表示对象类型(如字符串)的数据。当变量是基本数据类型时,变量中存储的是数据的值,而当变量是对象(引用)类型时,变量中存储的是对象的地址,该地址指向对象在内存中的位置,如图2.1所示。salary197employee图2.1变量示意图在图2.1中,salary是一个基本类型的变量,其中存储的值是197;而employee是一个对象类型的变量,所以其中存储的值是所指向对象在内存中的地址。注意,JaVa语言中字符类型(Char)是基本数据类型,而字符串(S
3、tring)则是对象类型。本节将介绍Java语言中的几种基本数据类型。2.1.1 基本数据类型1 .整型JaVa语言中提供了4种整型数据类型:byteShort、int和Iong,如表2.1所示。类型大小/格式描述byte8位二进制字节整型short16位二进制短整型int32位二进制整型long64位二进制长整型表2.1整型数据类型三三=三三三这4种类型都只能表示整数(包括负数),由于占用存储空间大小的不同,所能表示的数值范围也有所不同,占用空间越大,表示的范围越大。此外,在不同的平台上,相同数据类型的大小和格式均是固定的,不会改变。注意:许多语言中,基本数据类型的格式和大小与程序运行的平台
4、有关,这是产生程序跨平台困难的主要原因之一。JaVa语言中,对每种基本数据类型都限定了固定的格式和大小,因此消除了数据类型对平台的依赖性。可以这样给一个整型变量赋值:intsalary=l97;如果给一个长整型变量赋值,则在数字后面加一个L,表示该数值是长整型:longsalary=l97L;注意,读者如果需要测试上面的两条赋值语句是否正确,则可以用这两条语句覆盖编程框架TestSketch中的省略号,得到:publicclassTestSketchpublicstaticvoidmain(Stringargs)/以下添加测试代码intsalary=l97;longsalary=l97L;)然
5、后编译、运行TestSketchjava即可。2 .浮点类型浮点类型用来表示有小数的数值。浮点类型分为单精度浮点类型和双精度浮点类型两类,如表2.2所示。之所以称double为双精度,是因为double数据类型表示数据的精度是float的两倍。但是double类型的数据在运算时速度低于float,因此在精度要求不高的条件下,如果需要大量存储以及运算数据,则使用float类型。如果精度要求高,则使用double类型。表2.2浮点数据类型类型大小/格式描述float32位IEEE754规范单精度浮点类型double64位IEEE754规范双精度浮点类型double和float基本数据类型有对应的封
6、装类DOUble和Float,并且在DoUble和Float封装类中以类变量的方式定义了浮点数的3个特殊值:正无穷、负无穷和非数字。Double.POS工T工VE_工NF工N工TY(Float.PoS工T工VE_工NF工N工TY)Double.NEGATIVE_INFINITY(Float.NEGATIVE_INFINITY)Double.NaN(Float.NaN)可以为变量直接赋这些特殊的值,例如:doubleWeight=Double.POSITIVE_INFINITY;这条语句将变量weight的值置为正无穷。在JaVa编程语言中,浮点类型的数值默认为是双精度类型的,那么给单精度类型的
7、变量赋值时需要在数值后面加上F或f,以表示该数值是单精度类型的。如果使用下面的赋值语句:floatmiles=0.9;编译器将会报错,因为0.9默认为是double类型的,赋值给float类型的变量会丢失精度。正确的赋值方法应该是:floatmiles=0.9f;高等学校应用型特色规划教材或是:floatmiles=0.9F;但是给double类型的变量赋值时,可以在数值后面加上D(或d),也可以不加,例如:doublemiles=0.9;doublemiles=0.9D;doublemiles=0.9d;这些均是正确的。3 .字符类型读者可能对ASCII码都已经比较熟悉了,ASCII码的长度
8、是8位,最多只能表示128个字符,扩展的ASal编码也只能处理256个字符。因此,如果想用ASCn码来对世界上所有语言中的字符进行统一编码是不可能的。而UniCOde编码采用16位的编码方式,因此可以对65536种字符进行编码,能够容纳目前世界上已知的字符集。JaVa编程语言中所有的字符均使用Unicode编码,Unicode编码值通常用十六进制表示,如u0049是T的UIIiCode编码以表示是UniCode值,也称为转义字符。字符类型只能表示单个字符,如表2.3所示。表示字符类型的值是在字符两端加上单引号,如注意官和“g”是不同的,前者是一个字符,属于基本数据类型;后者表示的是一个字符串(
9、只是该字符串中只有一个字符),属于一个对象数据类型。表2.3字符数据类型类型大小/格式描述Char16位Unicode编码表示单个字符下面的例子是给一个字符类型的变量赋值:charkind=I;/给字符变量kind赋值T也可以给字符类型的变量直接赋Unicode编码值,例如:/给字符变量kind赋T的UniCOci编码值,等价于Charkind=I;charkind=u0049;读者还要特别注意的是一些常用的转义字符,如表2.4所示。表2.4常用转义字符转义字符含义Unicode编码值b退格uOOO8t制表u0009n硬回车uOOOar软回车uOOOd双引号u0022单引号u0027W反斜杠u
10、005c例如,要在屏幕上输出“ThiSiSaCharteSt”(双引号也要输出),如果使用语句:System,out.printIn(Thisisachartest);那么编译会通不过,因为编译器将前面一对引号作为一个字符串,后面一对引号也作为字符串,这样就产生了语法错误。这时候就要使用转义字符了,正确的语句可以是:System,out.printIn(Thisisachartest);4 .布尔类型布尔类型(boolean)的值只有两个:true或是false,分别表示真或者假,用于逻辑条件的判断。注意:在C/C+中,数值也可以充当布尔类型的值:O相当于false,非零值相当于trueo这就
11、很容易在程序中引入bug,例如下面的if语句:if(age=O)/判断age是否为O在C/C+中是可以编译运行的。但是该语句隐含了一个bug,因为不管age的实际值是什么,总是判定if语句不成立。而在JaVa中,该语句是不能编译通过的,必须使用:if(age=O)/判断age是否为02.1.2 变量JaVa编程语言中,要使用变量,必须先声明变量。按照如下方式声明变量:VariableTypeVariableName;例如:intlength;floatmiles;booleanflag;JaVa语言中,通过变量名来引用变量的值。因此必须给每个变量定义合法的变量名。变量名的定义必须符合以下几条规
12、则: 变量名是由Unicode字母或是数字组成的不间断序列(中间不能有空格),长度不限,并且必须以字母开头。 变量名不能是系统关键字(如int)、布尔值(true或false)或保留字(null)。 在相同的作用域内(参看2.1.3小节),不能重复声明同一变量名。注意:由于Unicode字符集非常庞大,当需要判断一个字符是否可以用作变量名的起始字母时,使用CharacterjsJavaIdentifierStart(Char),如果返回值为true,表示该字符可以作为变量名的字母;要判断一个字符是否可以作为变量名的组成部分,使用CharacterjsJavaIdentifierPart(Cha
13、r)o高等学校应用型特色规划教材习惯上,变量名以小写的字母开头,类名以大写的字母开头。如果变量名称由多个单词组成,那么首单词的字母全部小写,后续所有单词的首字母大写,其余部分小写,例如:mySalaryThisYearo变量名是区分大小写的,例如mySalary和mysalary就是不同的变量。建议不要同时声明类似的容易混淆的变量。2.1.3 变量的作用域变量总是在一定的区域内起作用,这个区域就是变量的作用域。实际上,在定义变量时,变量的作用域就随之确定了,变量的作用域与变量定义所处的位置是密切相关的。这里为了比较全面地介绍变量作用域的概念,涉及类以及异常处理的概念(详细内容请参阅后续章节)。
14、初学者可以暂时忽略关于类成员变量和异常处理参数变量作用域的介绍(图2.2中的和),重点掌握方法参数变量和局部变量的作用域(图2.2中的、和)。在介绍作用域之前,有必要了解一下块(block)的概念。块是用一对花括号“”括起来的任意数量的JaVa语句,块允许嵌套。例如图2.2中所示的区域就是一个块,称为方法块;同样区域也是一个块,称为类块。和也均是一个代码块。变量定义所在的位置决定了变量的作用域,根据变量定义所在的位置不同,可以分为以下4类: 类成员变量。 局部变量。 方法参数变量。 异常处理参数变量。类成员变量的作用域是整个类块。图2.2中,中的任何地方均可以使用变量ao编程人员可以在一个块中
15、声明局部变量,例如类ScopeDemo中的变量C和f都是局部变量。局部变量的作用域是从该变量的声明处起至所在块的结束。例如变量c的作用域是块,即变量c在块内都是有效的;而同样是局部变量的f的作用域是块,作用域要比变量C小。方法参数变量是用来传递参数值到方法中去的,它的作用域是所在方法的整个方法块。例如类ScopeDemo中的方法参数变量b,其作用域是整个方法块。异常处理参数变量类似于方法参数变量,只是其作用域仅限于捕获异常的catch块。例如类ScopeDemo中的异常处理参数变量e,其作用域仅限于块。下面的一段代码是变量作用域实例,请读者阅读后结合本节内容指出代码中几处访问变量出错的原因。例
16、2.1ScopeDemojava类ScopeDemo的类成员变量a,在类块publicclassScopeDemo图2.2变量作用域示意图publicclassScopeDemointa=50;publicvoidadd(intb)System,out.printIn(八);/正确System,out.printIn(b);/正确System,out.printIn(c);/错误intc=100;tryintc;/错误System,out.printIn(b);/正确System,out.printIn(c);/正确intf=200;System,out.printIn(f);/正确catch
17、Exceptione)System,out.printin(e.toString();/正确System,out.printIn(b);/正确System,out.printIn(c);/正确System,out.printIn(c);/正确System,out.printIn(f);/错误System,out.printin(e.toString();/错误System,out.printIn(b);/正确System,out.printIn(八);/正确2.1.4 变量的初始化变量在声明后,可以通过赋值语句对其进行初始化。初始化后的变量仍然可以通过赋值语句赋以其他不同的值。例如:doub
18、lesalary;/变量声明salary=200d;/初始化赋值salary=400d;/重新赋值,但不是初始化变量还可以声明及初始化同时进行:doublesalary=200d;/变量声明的同时进行初始化需要注意的是,给变量赋值类型必须要匹配,即变量的数据类型要和所赋值的数据类型一致。高等学校应用型特色规划教材V注意:方法参数变量和异常处理参数变量不能以上述方式来进行赋值与初始化。这两种类型的变量值是在方法调用或是抛出异常时传递进来的。Java语言中还有一种特殊的final类型的变量,称作常量。final类型的变量在初始化后就不能再重新对其赋值,常用于表示一些固定不变的值。使用final关键
19、字来定义常量的例子如下:finaldoublePI=3.1415926;/声明并初始化一个常量PI=3.14;/出错,不能修改已经初始化的常量的值PI被定义为一个常量,并初始化为3.1415926,以后在程序的任何地方都不能改变PI的值。有的时候会存在这样一种情形:我们需要一个常量,但是在声明它的时候还不能确定其值是多少。这时候,可以使用滞后初始化的方法,即声明常量时不进行初始化,在适当的时候再初始化。例如:finaldoubleACONSTANT;/声明,未初始化A_CONSTANT=0.9;/滞后初始化同样,该变量一旦初始化后,值也不允许修改。R注意:常量一旦初始化,不能对其重新赋值。习惯
20、上,常量名中所有的字符均大写。2.2操作符操作符可以对若干个操作数进行特定的运算。根据操作符需要操作数的不同,可以将操作符分为以下3类: 一元操作符。 二元操作符。 三元操作符。一元操作符只能对一个操作数进行运算。一元操作符可以用两种形式表述:前缀式和后缀式。前缀式是指操作符在前,操作数在后,例如:+a;+是一元操作符,a为操作数。后缀式正好相反,操作符在后,操作数在前,例如:a+;二元操作符对两个操作数进行运算。力(+)、减(一)、乘(*)、除(/)、求模()以及赋值(二)都是二元操作符。例如:a=7+8;二元操作符“+”对7和8这两个操作数进行运算得到结果15o二元赋值操作符“一再对15和
21、a这两个操作数进行运算,结果就是将a赋值为15oJava语言中还有一个特殊的三元操作符,对3个操作数进行运算。一般表示形式为: ondition?result1:result2;如果第一个操作数condition的值为true,那么取值result1;反之取值result20例如:min=xy?y:x;最终,min的值为X与y中较小的值。Q注意:三元操作符中的第一个操作数必须为布尔类型的值。下面按照操作符的功能分别加以分类讲解。2.2.1 算术操作符三三=三三三加(+)、减(一)、乘(*)、除(/)、求模()是JaVa编程语言中提供的算术操作符。算术操作符只能对浮点型和整型数据类型的操作数进行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 基本 语法
