第02章数据类型及其运算-yrlong精.ppt
第02章数据类型及其运算-yrlong第1页,本讲稿共53页主要内容2.1标识符和关键字 2.2常量和变量 2.3基本数据类型 2.4运算符 2.5表达式 2.6数组 第2页,本讲稿共53页标识符n标识符:为程序中的各个元素进行命名.n一般地,在Java 中标识符是以字母、下划线(_)、美元符号($)等其它货币符号(如,)开始的一个字符序列,后面可以跟字母、下划线、美元符号、数字等字符。nJava语言使用Unicode字符集 n标识符是大小写敏感的,没有最大长度的限制,不能和关键字相同 第3页,本讲稿共53页标识符n总体来说定义标识符可以使用的字符包括:n大小写字母、数字;nUnicode字符集中编号大于0 xC0的所有字符。n凡是用Character.isJavaIdentifierStart()返回true,都可作为首字符,Character.isJavaIdentifierPart()返回true,都可作为标识符的一部分。n合法的标识符:nBody,_test,$hellon非法标识符:n 5Test,hello*,world#,classn注意:在中文环境下,可以使用汉字作为标识符。例如,int 中文=5;第4页,本讲稿共53页练习题Which declarations of identifiers are legal?A.$personsB.TwoUsersC.*pointD.thisE._endline 第5页,本讲稿共53页关键字n所有的关键字都是小写的。如果被大写,就不是关键字了。n用于数据类型的关键字nbyte short int long float double char booleann用于流程控制语句的关键字nif else switch case default do while for break continuen方法、类型、变量的修饰关键字nprivate public protected final static abstract synchronized volatilen异常处理关键字ntry catch finally throw throws第6页,本讲稿共53页关键字n对象相关关键字nnew extends implements class instanceof this supern字面值常量关键字nfalse true nulln方法相关关键字nreturn voidn包相关关键字npackage import第7页,本讲稿共53页练习题Which of the following are Java keywords?1)NULL 2)new 3)instanceOf 4)wend第8页,本讲稿共53页注释 n单行注释n单行注释以“/”开头,至该行结尾,其格式如下:n多行注释n/*注释文本n n*/n文档注释n/*注释文本n*注释文本n*n*/第9页,本讲稿共53页主要内容2.1标识符和关键字 2.2常量和变量 2.3基本数据类型 2.4运算符 2.5表达式 2.6数组 第10页,本讲稿共53页变量 n修饰符修饰符 =,=.;nint i;nint j=5,k=4;n作用域分,变量大致可分为:局部变量、类成员变量、方法参数、异常处理参数。第11页,本讲稿共53页变量作用域n局部变量是在方法内部或代码块中声明的变量,它的作用域为它所在的代码块,在程序设计中,以“”为界。n类成员变量,它的作用域是整个类。又可以细分为静态变量和实例变量 n方法参数的作用域,是它所在的方法 n异常处理参数的作用域,是它所在的异常处理部分 n变量隐藏(按作用域的大小)(在一个作用域中有多个同名的变量)第12页,本讲稿共53页常量 n整形常量234,实型常量23.4,字符常量a,布尔常量true和false,以及字符串常量“hello world!”nfinal关键字(后面还会碰到)nfinal int MAX=100;nfinal int MAX_LOOP=5;第13页,本讲稿共53页主要内容2.1标识符和关键字 2.2常量和变量 2.3基本数据类型 2.4运算符 2.5表达式 2.6数组 第14页,本讲稿共53页数据类型分类数据类型基本类型引用类型数值类型字符类型(char)布尔类型(boolean)整数类型(byte,short,int,long)浮点类型(float,double)类(class)接口(interface)数组图图 2-1 Java语言的数据类型语言的数据类型第15页,本讲稿共53页数据类型nJava的基本数据类型都有固定的数据位,不随运行平台的变化而变化。n引用类型都是用类或对象实现的。n布尔类型 nboolean b=false;第16页,本讲稿共53页字符类型字符类型n一个字符用一个16位的Unicode码表示 nchar c,c1=a;n中的Unicode码是u4e2d n整数和字符型数据在一起运算 n字符向整数转换转义字符转义字符 描述描述 ddd1到3位8进制数所表示的字符(ddd)uxxxx1到4位16进制数所表示的字符(xxxx)单引号字符双引号字符 反斜杠 r回车 n换行 f走纸换页 t横向跳格 b退格第17页,本讲稿共53页整数类型 nJava中的整数有三种进制形式表示:n十进制:用09的数值表示,首位不能为0,例如:124,-100;n八进制:以0开头,后跟多个07之间的数字,如0134;n十六进制:以0 x或者0X开头,后跟多个09之间的数字、或AF之间的的大写字、或者af之间的小写字母。af或者A-F分别表示1015,例如,0 x23FE,等于十进制数9214。第18页,本讲稿共53页整数类型数据类型数据类型所占位数所占位数数的范围数的范围byte8-27(27-1)short16-215(215-1)int32-231(231-1)long64-263(263-1)在表示在表示long型常量时,需要在数字后面加上后缀型常量时,需要在数字后面加上后缀L或者或者l。例如3L表示一个long型的常量,而不是int型常量。第19页,本讲稿共53页浮点类型 数据数据类类型型所占位数所占位数数的范数的范围围float(单精度浮点数)323.4e-038 3.4e+038double(双精度浮点数)641.7e-308 1.7e+308一个浮点数隐含为double型。在一个浮点数后加字母F或f,表示float型。常量值3.45的类型是double;3.45F的类型是float。第20页,本讲稿共53页各类型数据间的相互转换 n自动类型转换自动类型转换n从低级到高级发生自动类型转换。从表达范围小的类型向表达范围大的类型发生自动类型转换。不同数据类型的转换如下所示:n低低-高高nbyte,short,char-int-long-float-doublen注意:注意:byte,short和char在一起运算时,首先转换为int类型进行运算。n【例例2-1】分析下面程序中的错误。nbyte b1=5;nshort s1=6;nshort s2;ns2=b1+s1;第21页,本讲稿共53页类型转换n强制类型转换强制类型转换n由高级向低级数据类型转换时,需要强制类型转换。例如:n int i65;n char c;n c=(char)i;/把int型变量转换成char型,需要强制类型转换。第22页,本讲稿共53页练习题Which of the following are legal statements?1)float f=1/3;2)int i=1/3;3)float f=1.01;4)double d=999d;第23页,本讲稿共53页主要内容2.1标识符和关键字 2.2常量和变量 2.3基本数据类型 2.4运算符 2.5表达式 2.6数组 第24页,本讲稿共53页算数运算符 运算符运算符用法用法含含义义结结合性合性二元运算符+op1+op2加法左-op1-op2减法左*op1*op2乘法左/op1/op2除法左%op1%op2模运算(求余)左一元运算符+op1正数右-op1负数右+op1,op1+自增右,左-op1,op1+自减右,左第25页,本讲稿共53页算数运算符的特点n对于二元运算符,运算结果的数据类型一般为两个操作数中表达范围较大的类型。例如,一个整数和浮点数运算的结果为浮点数。n对于一元运算符,运算结果的类型与操作数的类型相同。n自增、自减运算符有前缀和后缀两种形式,当是前缀形式(即+、-符号出现在变量的左侧)时,对变量实施的运算是“先运算后使用”;当是后缀形式(即+、-符号出现在变量的右侧)时,对变量实施的运算是“先使用后运算”。第26页,本讲稿共53页算数运算符的注意事项算数运算符的注意事项 n在Java中,%(求模运算符)的操作数可为浮点数,如52.3%10=2.3;nJava对+运算进行了扩展,可作字符串连接运算符,如ab+efd得abefd;n做+运算时,如果一个操作数是字符串,其它操作数自动转换成字符串.如:String s;s=s:+4*5;/结果是s=s:20;nbyte,short,char等类型进行混合运算时,会先自动转换为int类型再运算。第27页,本讲稿共53页赋值运算符 nj=i+20;运算符运算符示例示例含含义义+=count+=2count=count+2-=count-=2count=count-2*=count*=2count=count*2/=count/=2count=count/2%=count%=2count=count%2第28页,本讲稿共53页条件运算符 n(boolean_expr)?true_statement:false_statement;n result=sum=0?100:2*num;第29页,本讲稿共53页位运算符 nJava 用补码表示二进制数 n1表示为二进制为n 00000000 00000000 00000000 00000001(4个字节)n-1表示为二进制为n11111111 11111111 11111111 11111111 (4个字节)第30页,本讲稿共53页运算运算符符示例示例含含义义&Op1&Op2使Op1和Op2按位相与|Op1|Op2使Op1和Op2按位相或Op对Op按位取反Op1 Op2使Op1和Op2按位异或Op1 Op1 Op2使Op1右移Op2位(带符号,左边补充符号位)Op1 Op2使Op1无符号右移Op2位(左边始终补添0)位运算符位运算符 第31页,本讲稿共53页注意事项n除 为右结合外,其余为左结合。n操作数的类型一般为整型或字符型。&,|,三个运算符可以用于boolean。n右移是用符号位来填充右移后留下的空位,是用零来填充空位.n若两个数据的长度不同,如a&b,a为byte型,b为int型,系统首先会将a的左侧24位填满,若a为正,则填满0,若a为负,填满1即进行“符号扩充”。第32页,本讲稿共53页举例:按位与运算符按位与运算符&十进制数二进制数操作数1500000000 00000000 00000000 00000101操作数2900000000 00000000 00000000 00001001运算结果100000000 00000000 00000000 00000001第33页,本讲稿共53页举例n51的 结果 第34页,本讲稿共53页逻辑运算符 n逻辑运算只能处理布尔类型的数据,所得结果也是布尔值 n逻辑运算符支持短路运算逻辑运算符支持短路运算 运算符运算符示例示例含含义义结结合性合性&Op1&Op2逻辑与运算左|Op1|Op2逻辑或运算左!Op逻辑非运算右第35页,本讲稿共53页主要内容2.1标识符和关键字 2.2常量和变量 2.3基本数据类型 2.4运算符 2.5表达式 2.6数组 第36页,本讲稿共53页表达式n表达式是程序设计语言的基本组成部分,表示一种求值的规则,是由运算符和操作数组成的符号序列。n表达式的运算结果的类型,就是表达式的类型 n在对表达式进行运算时,遵循一定的规则,要按运算符的优先级从高到低进行,同级的运算符则按从左到右的方向进行。第37页,本讲稿共53页表达式高高|低低1 1.()+-!instanceof.()+-!instanceof 2new(type)3*/%4+-5 6=7=!=8&910|11&12|13?:14=+=-=*=/=%=15&=!=第38页,本讲稿共53页几个特点 n赋值运算符的优先级最低,因为赋值运算符要使用表达式的值;n关系运算符的优先级比布尔逻辑运算符的优先级高;n.,()等运算符的优先级最高;n一元运算符的优先级也比较高;n算术元算符要比关系运算符和二元逻辑运算符的优先级要高。第39页,本讲稿共53页练习题Which of the following will compile without error?1)char c=1;System.out.println(c1);2)Integer i=Integer(1);System.out.println(i1);3)int i=1;System.out.println(i1);4)int i=1;System.out.println(i1);第40页,本讲稿共53页练习题nWhich of the following are Java key words?1)double2)Switch3)then4)instanceof第41页,本讲稿共53页练习题nWhich of the following are not Java keywords?1)volatile2)sizeOf3)goto4)try第42页,本讲稿共53页练习题Given the following variables which of the following lines will compile without error?String s=Hello;long l=99;double d=1.11;int i=1;int j=0;1)j=i s;2)j=ij;3)j=id;4)j=i1);1)02)-13)14)2147483647第45页,本讲稿共53页练习题nWhat will be output by the following statement?System.out.println(1 32);1)12)-13)324)-2147483648第46页,本讲稿共53页主要内容2.1标识符和关键字 2.2常量和变量 2.3基本数据类型 2.4运算符 2.5表达式 2.6数组 第47页,本讲稿共53页一维数组的定义一维数组的定义 n int a;或者n int a;n这里只有数组变量的定义,没有为数组元素分配空间,只为数组的引用分配了空间,a目前为一个空的引用。n在声明数组时,可以为数组赋初值。例如:n int a=0,1,2,3,4;第48页,本讲稿共53页使用使用new为数组分配空间为数组分配空间 n=new ;na=new int5;n创建了一个包含个元素的数组,每个元素被自动初始化为 nint a =new int5n每个数组都有一个属性length,指明它的长度 可以讲一个用筛选法求素数 第49页,本讲稿共53页变量的自动化初始值变量的自动化初始值 数数组组元素的元素的类类型型初始初始值值byte,short,int,long 0float,double0.0char0booleanfalse引用类型null第50页,本讲稿共53页一维数组的图形表示a null(a)int a a 0 x0345o堆a001234a1 a2 a3 a4(b)int a=0,1,2,3,4 a 0 x4345o堆a000000a1 a2 a3 a4(c)int a;a=new int5;图图2-2 一维数组存储结构一维数组存储结构第51页,本讲稿共53页二维数组 n最常用的二维数组是一个特殊的一维数组,它的每个元素都是一个一维数组。又叫做数组的数组 n int two;n或 int two;n这里只有变量的定义,没有分配内存空间。n在定义二维数组时也可以赋初值,将数组元素的值用多层括号括起来,例如:n int two=0,1,2,3,4,5;第52页,本讲稿共53页使用使用new为二维数组分配空间为二维数组分配空间 nint two =new int23;n或者nint two ;n two=new int2 3;n二维数组还有另外一种初始化方式,就是从最高维开始,分别为每一维分配空间。nint two ;ntwo=new int2;ntwo0=new int2;ntwo1=new int3;第53页,本讲稿共53页