第03章数据类型、变量、数组(pp2366).ppt

上传人:sccc 文档编号:5885984 上传时间:2023-08-29 格式:PPT 页数:66 大小:190.54KB
返回 下载 相关 举报
第03章数据类型、变量、数组(pp2366).ppt_第1页
第1页 / 共66页
第03章数据类型、变量、数组(pp2366).ppt_第2页
第2页 / 共66页
第03章数据类型、变量、数组(pp2366).ppt_第3页
第3页 / 共66页
第03章数据类型、变量、数组(pp2366).ppt_第4页
第4页 / 共66页
第03章数据类型、变量、数组(pp2366).ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《第03章数据类型、变量、数组(pp2366).ppt》由会员分享,可在线阅读,更多相关《第03章数据类型、变量、数组(pp2366).ppt(66页珍藏版)》请在三一办公上搜索。

1、第1部分 Java语言,第03章 数据类型、变量、数组,3.1 Java语言是强类型语言语言,Java 语言强类型语言。Java 的安全和健壮性部分来自于强类型语言。每个变量有类型,每个表达式有类型,而且每种类型是严格定义的。所有的数值传递,不管是直接的还是通过方法调用经由参数传过去的都要先进行类型相容性的检查。Java编译器对所有的表达式和参数都要进行类型相容性的检查以保证类型是兼容的。任何类型的不匹配都是错误的,在编译器完成编译以前,错误必须被改正。,3.2 简单数据类型,Java定义了8个简单(或基本)的数据类型。使用简单数据类型可以构造数组或类的类型来使用它们。Java是完全面向对象的

2、,但简单数据类型不是。这样做的原因是出于效率方面的考虑。Java可移植性的要求,所有的数据类型都有一个严格的定义的范围。,3.3 整数类型,Java 定义了4个整数类型:byte,short,int,long。Java 不支持无符号的整数。长整型 64 9,223,372,036,854,775,808 9,223,372,036,854,775,807整型 32 2,147,483,648 2,147,483,647短整型 16 32,768 32,767字节型 8 128127,3.3.1 字节型(byte),有符号的8位类型。数的范围是-128127。从网络或文件处理数据流的时候,字节类

3、型的变量特别有用。处理未加工的二进制的数据时,它们也是有用的。例如:byte b,c;,3.3.2 短整型(short),有符号的16位类型。数的范围是 32,76832,767。可能是Java中使用得最少的类型。例如:short s;short t;,3.3.3 整型(int),最常用的整数类型是 int。它是有符号的32位类型。数的范围是-2,147,483,6482,147,483,647。包含 byte,short,int 及字面量数字,在进行计算以前,所有表达式的类型被提升到 int。整型是最通用并且有效的类型。,3.3.4 长整型(long),有符号的64位类型数的范围是 9,22

4、3,372,036,854,775,808 9,223,372,036,854,775,807对于那些整型不足以保存所要求的数值时是有用的。,例 P30,/Compute distance light travels using long variables.class Light public static void main(String args)int lightspeed;long days;long seconds;long distance;/approximate speed of light in miles per second lightspeed=186000;days

5、=1000;/specify number of days here seconds=days*24*60*60;/convert to seconds distance=lightspeed*seconds;/compute distance System.out.print(In+days);System.out.print(days light will travel about);System.out.println(distance+miles.);,Ans:,In 1000 days light will travel about 16070400000000 miles.,3.4

6、 浮点型(Floating-Point Types),浮点数字,也就是人们知道的实数(real)。Java实现了标准(IEEE-754)的浮点型和运算符集。单精度浮点型(float)及双精度(double)浮点型:DOUBLE 64 1.7E3081.7E+308 float 32 3.4E0383.4E+038,3.4.1 单精度浮点型(float),占用32位存储空间的单精度(single-precision)值。比双精度更快且只占用双精度一半的空间。当值很大或很小时,它将变得不精确。例子:Float hightemp,lowtemp;,3.4.2 双精度型(double)浮点型,占用64

7、位的存储空间。数学函数,如 sin(),cos(),和 sqrt()均返回双精度的值。当你需要保持多次反复迭代的计算的精确性时,或在操作值很大的数字时,双精度型是最好的选择。,例 P32,/Compute the area of a circle.class Area public static void main(String args)double pi,r,a;r=10.8;/radius of circle pi=3.1416;/pi,approximately a=pi*r*r;/compute area System.out.println(Area of circle is+a)

8、;,3.5 字符,Java 使用 Unicode 码代表字符。Java 中的 char 类型是16位,其范围是065,536,没有负数的char。有关 Unicode 码的更多信息可在网址http:/www.unicode.org上找到。,例 P32,/Demonstrate char data type.class CharDemo public static void main(String args)char ch1,ch2;ch1=88;/code for X ch2=Y;System.out.print(ch1 and ch2:);System.out.println(ch1+ch2

9、);,Ans:,ch1 and ch2:X Y,例 P33,/char variables behave like integers.class CharDemo2 public static void main(String args)char ch1;ch1=X;System.out.println(ch1 contains+ch1);ch1+;/increment ch1,像整数一样进行运算操作 System.out.println(ch1 is now+ch1);,Ans:,ch1 contains Xch1 is now Y,3.6 布尔型,表示逻辑值的简单类型。值只能是真或假。当用

10、方法 println()输出布尔的值时,显示的是true或false。布尔变量的值本身就足以用来控制if语句。关系运算符(例如)的结果是布尔值。,例 P33,/Demonstrate boolean values.class BoolTest public static void main(String args)boolean b;b=false;System.out.println(b is+b);b=true;System.out.println(b is+b);/a boolean value can control the if statement if(b)System.out.p

11、rintln(This is executed.);b=false;if(b)System.out.println(This is not executed.);/outcome of a relational operator is a boolean value System.out.println(10 9 is+(10 9);,Ans:,b is falseb is trueThis is executed.10 9 is true,3.7 进一步研究字面量3.7.1 整数字面量,任何一个数字的值就是一个整数字面量。十进制(decimal,基数是10)。八进制(octal,基数是8):

12、前导为 0十六进制(hexadecimal,基数是16):前导为 0 x 或 0XLong 字面量:后面加 l 或 L。,3.7.2 浮点字面量,标准记数法(Standard notation):由整数部分加小数点加小数部分组成。例如2.0,3.14159,和 0.6667科学记数法(Scientific notation):是浮点数加一表明乘以10的指定幂次的后缀,指数是紧跟E或 e 的一个十进制的数字,它可以是正值或是负值。例子如6.022E23,314159E-05,及2e+100。Java中的浮点字面量默认是双精度。为了指明一个浮点字面量,你必须在字面量后面加 F 或 f。,3.7.3

13、 布尔型字面量,布尔型字面量仅仅有2个逻辑值,真或假。Java 中,真字面量的值不等于 1,假字面量的值也不等于 0。,3.7.4 字符字面量,可见的 ASCII 字符都能直接被包括在单引号之内,例如 a,z,and。八进制,使用反斜线加3个阿拉伯数字。例如,141 是字母 a。十六进制,使用反斜线和 u(u)加4个十六进制阿拉伯数字。例如,u0061因为高位字节是零,代表ISO-Latin-1字符集中的 a。,字符转义序列,ddd 八进制字符(ddd)uxxxx 十六进制Unicode码字符 单引号 双引号 反斜杠r 回车键n 换行f 换页t 水平制表符b 退格,3.7.5 字符串字面量,字

14、符串字面量语言将一系列字符用双引号括起来。为字符串定义的字符转义序列和八进制/十六进制记法在字符串内的工作方法一样。例如:Hello World twonlines This is in quotes,3.8 变量,变量是 Java 程序的一个基本存储单元。变量由一个标识符,类型及一个可选初始值的组合定义。所有的变量都有一个作用域,定义变量的可见性,生存期。,3.8.1 声明一个变量,所有的变量必须先声明再使用。基本的变量声明方法如下:type identifier=value,identifier=value.;变量声明的例子:int a,b,c;/declares three ints,a

15、,b,and c.int d=3,e,f=5;/declares three more ints,initializing/d and f.byte z=22;/initializes z.double pi=3.14159;/declares an approximation of pi.char x=x;/the variable x has the value x.Java允许任何合法的标识符具有任何它们声明的类型。,3.8.2 动态初始化,允许在变量声明时使用任何有效的表达式来动态地初始化变量。例如:例 P37/Demonstrate dynamic initialization.cl

16、ass DynInit public static void main(String args)double a=3.0,b=4.0;/c is dynamically initialized double c=Math.sqrt(a*a+b*b);System.out.println(Hypotenuse is+c);,3.8.3 变量的作用域和生存期,Java 允许变量在任何程序块内被声明。一个程序块定义了一个作用域(scope)。一个作用域决定了哪些对象对程序的其他部分是可见的,它也决定了这些对象的生存期。在一个作用域中定义的变量对于该作用域外的程序是不可见(即访问)的。作用域规则为封装

17、提供了基础。作用域可以进行嵌套。外面的作用域包含内部的作用域。内部作用域定义的对象对于外部是不可见的。,例 P38,/Demonstrate block scope.class Scope public static void main(String args)int x;/known to all code within main x=10;if(x=10)/start new scope int y=20;/known only to this block/x and y both known here.System.out.println(x and y:+x+y);x=y*2;/y=1

18、00;/Error!y not known here/x is still known here.System.out.println(x is+x);,Ans:,x and y:10 20 x is 40,变量可以在程序块内的任何地方被声明,但是只有在他们被声明以后才是合法有效的。例如:/This fragment is wrong!count=100;/oops!cannot use count before it is declared!int count;变量在其作用域内被创建,离开其作用域时被撤消。在一个方法内定义的变量在几次调用该方法之间将不再保存它们的值。在块内定义的变量在离开该

19、块时也将丢弃它的值。一个声明定义包括一个初始化,那么每次进入声明它的程序块时,该变量都要被重新初始化。,例 P39,/Demonstrate lifetime of a variable.class LifeTime public static void main(String args)int x;for(x=0;x 3;x+)int y=-1;/y is initialized each time block is entered System.out.println(y is:+y);/this always prints-1 y=100;System.out.println(y is

20、now:+y);,Ans:,y is:-1y is now:100y is:-1y is now:100y is:-1y is now:100,尽管程序块能被嵌套,你不能将内部作用域声明的变量与其外部作用域声明的变量重名。Java不同于 C 和 C+。例子:P39/This program will not compileclass ScopeErr public static void main(String args)int bar=1;/creates a new scope int bar=2;/Compile-time error bar already defined!,3.9 类

21、型转换与强制类型转换,编程时把一种类型的值赋给另外类型的一个变量是相当常见的。如果这2种类型是兼容的,那么Java将自动地进行转换。例如,int long。使用强制类型转换,能完成两个不兼容的类型之间的显式变换。,3.9.1 Java的自动转换,下列2个条件都能满足,将执行自动类型转换(automatic type conversion):这2种类型是兼容的。例如 integer 和 floating-point 彼此兼容目的类型数的范围比来源类型的大。例如 int 型比 byte 型的范围大。数字类型(包括整数和浮点)都是彼此兼容。数字类型和字符类型或布尔类型是不兼容的字符类型和布尔类型是不

22、兼容的。,3.9.2 不兼容类型的强制转换,强制类型转换是一种显式的类型变换。强制类型转换通用格式如下:(target-type)value/target-type 指定了转换成类型。如果整数的值超出了 byte 型的取值范围,它的值将会因为对 byte 型值域取模而减少。例如:int a;byte b;b=(byte)a;把浮点值赋给整数类型时发生了截断,浮点值的小数部分会被舍去。如果浮点值太大而不能适合目标整数类型,那么它的值将会因为对目标类型值域取模而减少。,例 P41,/Demonstrate casts.class Conversion public static void main

23、(String args)byte b;int i=257;double d=323.142;System.out.println(nConversion of int to byte.);b=(byte)i;/257-byte,257 mod 256=1 System.out.println(i and b+i+b);System.out.println(nConversion of double to int.);i=(int)d;/323.142-323 System.out.println(d and i+d+i);System.out.println(nConversion of d

24、ouble to byte.);b=(byte)d;/323.142-323 mod 256-67 System.out.println(d and b+d+b);,Ans:,Conversion of int to byte.i and b 257 1Conversion of double to int.d and i 323.142 323Conversion of double to byte.d and b 323.142 67,3.10 表达式中类型的自动提升,对中间值的精确要求有时超过任何一个操作数的范围。例:byte a=40;byte b=50;byte c=100;int

25、d=a*b/c;/自动提升byte型或short型操作数到int型。自动类型提升有好处,也会引起编译错误。例如:byte b=50;/表达式求值时自动提升为int b=b*2;/Error!Cannot assign an int to a byte!使用一个显式的强制类型转换,byte b=50;b=(byte)(b*2);,3.10.1 类型提升的约定,byte 型和 short 型提升到 int 型。如果一个操作数是 long 型,整个表达式将被提升到 long 型。如果一个操作数是 float 型,整个表达式将被提升到 float 型。如果有一个操作数是 double 型,计算结果就是

26、 double 型。,例 P42,class Promote public static void main(String args)byte b=42;char c=a;short s=1024;int i=50000;float f=5.67f;double d=.1234;double result=(f*b)+(i/c)-(d*s);/b-float:float,c-int:int,s-double:double/float+int-double double System.out.println(f*b)+(i/c)+-+(d*s);System.out.println(result

27、=+result);,3.11 数组,数组(array)是相同类型变量的集合。可以使用共同的名字引用它。数组可被定义为任何类型。可以是一维或多维。数组是通过下标来访问它。,3.11.1 一维数组,一维数组实质上是相同类型变量列表。一维数组的声明格式是:type var-name;int month_days;用运算符 new 分配地址并把它赋给数组的形式如下:var-name=new typesize;month_days=new int12;你可以在方括号内指定它的下标来访问数组中特定的元素。所有的数组下标从零开始 month_days1=28;/值28赋给数组的第2元素,例 P44 定义的

28、数组存储了每月的天数,/Demonstrate a one-dimensional array.class Array public static void main(String args)int month_days;month_days=new int12;month_days0=31;month_days1=28;month_days2=31;month_days3=30;month_days4=31;month_days5=30;month_days6=31;month_days7=31;month_days8=30;month_days9=31;month_days10=30;mo

29、nth_days11=31;System.out.println(April has+month_days3+days.);,Ans:,April has 30 days.,对数组变量声明和对数组本身的分配结合起来,int month_days=new int12;数组可以在声明时被初始化。在花括号之内用逗号分开的表达式的列表。逗号分开了数组元素的值。Java 会自动地分配一个足够大的空间来保存你指定的初始化元素的个数,而不必使用运算符 new。,例 P44,/An improved version of the previous program.class AutoArray public

30、static void main(String args)int month_days=31,28,31,30,31,30,31,31,30,31,30,31;System.out.println(April has+month_days3+days.);Ans:同上题April has 30 days.,Java 严格地检查数组越界,例 P45 运用一维数组来计算一组数字的平均数class Average public static void main(String args)double nums=10.1,11.2,12.3,13.4,14.5;double result=0;int i

31、;for(i=0;i5;i+)result=result+numsi;System.out.println(Average is+result/5);Ans:Average is 12.3,3.11.2 多维数组,在Java中,多维数组实际上是数组的数组。下面语句定义了一个名为 twoD 的二维数组变量。int twoD=new int45;该语句分配了一个4行5列的数组并把它分配给数组 twoD。二维数组(4 行5 列)的概念性表示,例 P46上 从左到右,从上到下为数组的每个元素赋值,显示数组的值,/Demonstrate a two-dimensional array.class Two

32、DArray public static void main(String args)int twoD=new int45;int i,j,k=0;for(i=0;i4;i+)for(j=0;j5;j+)twoDij=k;k+;for(i=0;i4;i+)for(j=0;j5;j+)System.out.print(twoDij+);System.out.println();,Ans:,0 1 2 3 45 6 7 8 910 11 12 13 1415 16 17 18 19,当你给多维数组分配内存时,你只需指定第一个(最左边)维数的内存即可。你可以单独地给余下的维数分配内存。例如 int

33、twoD=new int4;twoD0=new int5;twoD1=new int5;twoD2=new int5;twoD3=new int5;程序定义了一个二维数组,它的第二维的大小可以是不相等的。,例 P46下 二维数组第二维的大小是不相等,/Manually allocate differing size second dimensions.class TwoDAgain public static void main(String args)int twoD=new int4;twoD0=new int1;twoD1=new int2;twoD2=new int3;twoD3=ne

34、w int4;int i,j,k=0;for(i=0;i4;i+)for(j=0;ji+1;j+)twoDij=k;k+;for(i=0;i4;i+)for(j=0;ji+1;j+)System.out.print(twoDij+);System.out.println();,Ans:,01 23 4 56 7 8 9不规则多维数组在某些情况下使用效率较高。稀疏矩阵。,例 P47 初始化多维数组,/Initialize a two-dimensional array.class Matrix public static void main(String args)double m=0*0,1*

35、0,2*0,3*0,0*1,1*1,2*1,3*1,0*2,1*2,2*2,3*2,0*3,1*3,2*3,3*3;int i,j;for(i=0;i4;i+)for(j=0;j4;j+)System.out.print(mij+);System.out.println();,Ans:,0.0 0.0 0.0 0.00.0 1.0 2.0 3.00.0 2.0 4.0 6.00.0 3.0 6.0 9.0,例 P48 一个345的3维数组,/Demonstrate a three-dimensional array.class threeDMatrix public static void m

36、ain(String args)int threeD=new int345;int i,j,k;for(i=0;i3;i+)for(j=0;j4;j+)for(k=0;k5;k+)threeDijk=i*j*k;for(i=0;i3;i+)for(j=0;j4;j+)for(k=0;k5;k+)System.out.print(threeDijk+);System.out.println();System.out.println();,Ans:,0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 1 2 3 40 2 4 6 80 3 6 9 120

37、0 0 0 00 2 4 6 80 4 8 12 160 6 12 18 24,3.11.3 另一种数组声明语法,声明数组还有第二种格式:type var-name;下面的两个定义是等价的:int al=new int3;int a2=new int3;下面的两个定义也是等价的:char twod1=new char34;char twod2=new char34;包含这种数组声明格式主要是为了方便。,3.12 字符串的简单介绍,Java 的字符串类型,叫做字符串(String)它不是一种简单的类型,它也不是简单的字符数组(在C/C+中是)。字符串在 Java 中被定义为对象。字符串类型被用来声明字符串变量。可以用方法 println()的参数一样用字符串类型。例如:String str=this is a test;System.out.println(str);,3.13 C/C+程序员请注意指针的用法,Java不支持或不允许指针(或者更恰当地说,Java不支持程序员来访问或修改指针)指针能放在内存的任何地址,即使是Java运行系统之外的地址。指针会使 Java applet 会突破 Java 运行环境和主机之间的防火墙。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号