《基本数据类型与数组.ppt》由会员分享,可在线阅读,更多相关《基本数据类型与数组.ppt(34页珍藏版)》请在三一办公上搜索。
1、第 1 页1 页1 页,第2章,陈岩,基本数据类型与数组,Java程序设计,第 1 页1 页2 页,主要内容标识符与关键字基本数据类型类型转换运算输入、输出数据数组,导读,第 1 页1 页3 页,2.1 标识符与关键字,2.1.1.标识符,用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符,简单地说,标识符就是一个名字。,(1)标识符由字母、下划线、美元符号和数字组成,长度不受限制。(2)标识符的第一个字符不能是数字字符。(3)标识符不能是关键字(关键字见下面的2.1.3节)(4)标识符不能是true、false和null(尽管true、false和null不是关键字
2、),第 1 页1 页4 页,2.1.2 Unicode字符集,Java语言使用Unicode标准字符集,该字符集由UNICODE协会管理并接受其技术上的修改,最多可以识别65536个字符.,第 1 页1 页5 页,2.1.3 关键字,关键字就是具有特定用途或被赋予特定意义的一些单词,不可以把关键字作为标识符来用。下面是Java的50个关键字。,abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float
3、 for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while,第 1 页1 页6 页,2.2 基本数据类型,有8种基本数据类型,分别是:boolean、byte、short、int、long、float、double、char。这8种基本
4、数据类型习惯上可分为以下四大类型:逻辑类型:boolean 整数类型:byte、short、int、long 字符类型:char 浮点类型:float、double,第 1 页1 页7 页,2.2.1 逻辑类型,常量:true,false。变量:使用关键字boolean来声明逻辑变量,声明时也可以赋给初值.例如:boolean x,ok=true,关闭=false;,第 1 页1 页8 页,2.2.2 整数类型(1),1int 型 常量:123,6000(十进制),077(八进制),0 x3ABC(十六进制)。变量:使用关键字int来声明int型变量,声明时也可以赋给初值.例如:int x=1
5、2,平均=9898,jiafei;对于int型变量,内存分配给4个字节(byte),占32位。int型变量的取值范围是:-231-231-12byte 型 常量:Java中不存在byte型常量的表示法,但可以把一定范围内的int型常量赋值给byte型变量。变量:使用关键字byte来声明byte 型变量 例如:byte x=-12,tom=28,漂亮=98;对于byte型内存分配给1个字节,占8位。Byte型变量的取值范围是-27-27-1,第 1 页1 页9 页,2.2.2 整数类型(2),3.short 型 常量:和byte型类似,Java中也不存在short型常量的表示法,但可以把一定范围
6、内的int型常量赋值给short型变量。变量:使用关键字short来声明short型变量 例如:short x=12,y=1234;对于short型变量,内存分配给2个字节,占16位.变量取值范围:-215215-14.long 型 常量:long型常量用后缀L来表示,例如108L(十进制)、07123L(八进制)、0 x3ABCL(十六进制)。变量:使用关键字long来声明long型变量.例如:long width=12L,height=2005L,length;对于long型变量,内存分配给8个字节,占64位。变量取值范围:-263263-1,第 1 页1 页10 页,2.2.3 字符类型
7、(1),1.常量:常量:A,b,?,!,9,好,t,等,即用单引号扩起的Unicode表中的一个字符。2.变量:使用关键字char来声明char型变量 例如:char ch=A,home=家,handsome=酷;取值范围:对于char型变量,内存分配给2个字节,占16位,最高位不是符号位,没有负数的char。char型变量的取值范围是0-65535。,char x=a,char x=97,第 1 页1 页11 页,2.2.3 字符类型(2),3.转义字符常量:有些字符(如回车符)不能通过键盘输入到字符串或程序中,就需要使用转义字符常量。例如:n(换行),b(退格),t(水平制表),(单引号)
8、,“(双引号),(反斜线)等。4.用字符在Unicode表中排序位置的十六进制转义来表示该字符,其一般格式为u*。5.int型显示转换:要观察一个字符在Unicode表中的顺序位置,可以使用如(int)a或int p=a。6.char型显示转换:如果要得到一个065535之间的数所代表的Unicode表中相应位置上的字符必须使用char型显示转换。,注意:Java中的char型数据一定是无符号的。,第 1 页1 页12 页,例子1中,分别用类型转换来显示一些字符在Unicode表中的位置,以及Unicode表中某些位置上的字符,运行效果如图2.1。,例子1,第 1 页1 页13 页,2.2.4
9、 浮点类型(1),1.float型 常量:453.5439f,21379.987F,231.0f(小数表示法),2e40f(2乘10的40次方,指数表示法)。需要特别注意的是:常量后面必须要有后缀“f”或“F”。变量:使用关键字float来声明float型变量。例如:float x=22.76f,tom=1234.987f,weight=1e-12F;精度:float变量在存储float型数据时保留8位有效数字,实际精度取决于具体数值。取值范围:对于float型变量,内存分配给4个字节,占32位。1.4E-453.4028235E38和-3.4028235E38-1.4E-45,第 1 页1
10、页14 页,2.2.4 浮点类型(2),2.double 型 常量:2389.539d,2318908.987,0.05(小数表示法),1e-90(1乘10的-90次方,指数表示法)。对于double常量,后面可以有后缀“d”或“D”,但允许省略该后缀。变量:使用关键字double来声明double型变量。例如:double height=23.345,width=34.56D,length=1e12;对于double型变量,内存分配给8个字节,占64位。精度:double变量在存储double型数据时保留16位有效数字,实际精度取决于具体数值。,如:float x=0.4f;double y
11、=0.4;,第 1 页1 页15 页,2.3 简单数据类型的级别与类型转换运算(1),Java中数据的基本类型(不包括逻辑类型)按精度从“低”到“高”排列:byte short char int long float double,第 1 页1 页16 页,2.3 简单数据类型的级别与类型转换运算(2),当把级别低的变量的值赋给级别高的变量时,系统自动完成数据类型的转换。例如:float x=100;,byte,short,char,int,long,float,double,第 1 页1 页17 页,2.3 简单数据类型的级别与类型转换运算(3),当把级别高的变量的值赋给级别低的变量时,必须
12、使用显示类型转换运算。类型转换的格式:(类型名)要转换的值;例如 int x=(int)34.89;,第 1 页1 页18 页,2.3 简单数据类型的级别与类型转换运算(4),当把一个int型常量赋值给一个byte和short型变量时,不可以超出这些变量的取值范围,否则必须进行类型转换运算;例如,常量128属于int型常量,超出byte变量的取值范围,如果赋值给byte型变量,必须进行byte类型转换运算(将导致精度的损失),如下所示:byte a=(byte)128;,第 1 页1 页19 页,下面的例子2使用了类型转换运算,运行效果如图2.2。,例子2,第 1 页1 页20 页,2.4 从
13、命令行输入、输出数据 _1,可以使用Scanner类创建一个对象:Scanner reader=new Scanner(System.in);reader对象调用下列方法,读取用户在命令行(例如,MS-DOS窗口)输入的各种基本类型数据:nextBoolean()、nextByte()、nextShort()、nextInt()nextLong()、nextFloat()、nextDouble()。上述方法执行时都会堵塞,程序等待用户在命令行输入数据回车确认。,2.4.1 输入基本型数据,第 1 页1 页21 页,例子3:用户在键盘依次输入若干个数字,每输入一个数字都需要按回车键确认,在键盘输
14、入数0结束整个的输入操作过程,程序将计算出这些数的和,运行效果如图2.3。,第 1 页1 页22 页,2.4从命令行输入、输出数据_2,()或()可输出串值、表达式的值.二者的区别是前者输出数据后换行,后者不换行。允许使用并置符号:“+”将变量、表达式或一个常数值与一个字符串并置一起输出,如:System.out.println(m+个数的和为+sum);System.out.println(:+123+大于+122);,2.4.2 输出基本型数据,第 1 页1 页23 页,2.4从命令行输入、输出数据_2,注:在使用()或()输出字符串常量时,不可以出现“回车”,例如,下面的写法无法通过编译
15、:(你好,很高兴认识你);如果需要输出的字符串的长度较长,可以将字符串分解成几部分,然后使用并置符号:“+”将它们首尾相接,例如,以下是正确的写法:(你好,+很高兴认识你);,2.4.2 输出基本型数据,第 1 页1 页24 页,2.4从命令行输入、输出数据_3,(格式控制部分,表达式1,表达式2,表达式n)%d输出int类型数据值;%c输出char型数据;%f输出浮点型数据,小数部分最多保留6位;%s输出字符串数据。输出数据时也可以控制数据在命令行的位置。例如:%md输出的int型数据占m列;%m.nf输出的浮点型数据占m列,小数点保留n位。例如:System.out.printf(%d,%
16、f,12,23.78);,2.4.2 输出基本型数据,第 1 页1 页25 页,2.5 数组,数组是相同类型的变量按顺序组成的一种复合型数据类型。,这些相同类型的变量为数组的元素或单元。,数组通过数组名加索引来使用数组的元素。,第 1 页1 页26 页,2.5 数组,2.5.1 声明数组,1.声明一维数组有下列两种格式:数组的元素类型 数组名;数组的元素类型 数组名;例如:float boy;char cat;,2.声明二维数组有下列两种格式:数组的元素类型 数组名;数组的元素类型 数组名;例如:float a;Char b;,第 1 页1 页27 页,2.5 数组,2.5.2 为数组分配元素
17、,为数组分配元素的格式如下:数组名=new 数组元素的类型数组元素的个数;例如:boy=new float4;,数组变量boy中存放着这些元素的首地址,该地址称做数组的引用。,数组属于引用型变量,通过数组变量的名字加索引使用数组的元素(内存示意如图2.4所示).比如:boy0=12;boy1=23.908F;boy2=100;boy3=10.23f;,第 1 页1 页28 页,声明数组和创建数组可以一起完成,例如:float boy=new float4;二位数组和一维数组一样。int mytwo;mytwo=new int34;或 int mytwo=new int34;,构成二维数组的一维
18、数组不必有相同的长度。在创建二维数组时可以分别指定构成该二维数组的一维数组的长度。int a=new int3;,a0=new int6;a1=new int16;a2=new int8;,第 1 页1 页29 页,2.5.3 数组元素的使用,一维数组通过索引符访问自己的元素,如boy0,boy1等。,需要注意的是索引从0开始,因此,数组若有7个元素,那么索引到6为止,如果程序使用了如下语句:boy7=384.98f;程序可以编译通过,但运行时将发生ArrayIndexOutOfBoundsException异常。因此在使用数组时必须谨慎,防止索引越界。,第 1 页1 页30 页,2.5.4
19、length的使用,对于一维数组,“数组名.length”的值就是数组中元素的个数;对于二维数组“数组名.length”的值是它含有的一维数组的个数。,float a=new float12;,int b=new int36;,第 1 页1 页31 页,2.5.5 数组的初始化,创建数组后,系统会给数组的每个元素一个默认的值,如,float型是0.0。在声明数组的同时也可以给数组的元素一个初始值,如:float boy=21.3f,23.89f,2.0f,23f,778.98f;,也可以直接用若干个一维数组初始化一个二维数组,这些一维数组的长度不尽相同。例如:int a=1,1,1,1,2,1
20、,1,3,3,1,1,4,6,4,1;,第 1 页1 页32 页,2.5.6 数组的引用,数组属于引用型变量,两个相同类型的数组如果具有相同的引用,它们就有完全相同的元素。,如果使用了下列赋值语句(a和b的类型必须相同):a=b那么,a中存放的引用与b的相同,这时系统将释放最初分配给数组a的元素,使得a的元素与b的元素相同。,对于char型数组a,System.out.println(a)不会输出数组a的引用而是输出数组a的全部元素的值。,第 1 页1 页33 页,2.5.6 数组的引用,下面的例子4使用了数组,请读者注意程序的输出结果,运行效果如图2.7。,例子4,第 1 页1 页34 页,2.6 应用举例,折半法:对于从小到大排序的数组,我们只要判断数据是否和数组中间的值相等,如果不相等,当该数据小于数组中间元素的值,就在数组的前一半数据中继续折半找,否则就在数组的后一半数据中继续折半找,如此这般,就可以比较快地判断该数据是否在数组中。,例子5能判断用户输入的一个整数是否在已知的数组中。程序效果如图2.8,例子5,