Java第二章Java程序设计

上传人:枫** 文档编号:577946107 上传时间:2024-08-23 格式:PPT 页数:140 大小:837.52KB
返回 下载 相关 举报
Java第二章Java程序设计_第1页
第1页 / 共140页
Java第二章Java程序设计_第2页
第2页 / 共140页
Java第二章Java程序设计_第3页
第3页 / 共140页
Java第二章Java程序设计_第4页
第4页 / 共140页
Java第二章Java程序设计_第5页
第5页 / 共140页
点击查看更多>>
资源描述

《Java第二章Java程序设计》由会员分享,可在线阅读,更多相关《Java第二章Java程序设计(140页珍藏版)》请在金锄头文库上搜索。

1、Java实用教程第2章 Java基本语法 2.1Java程序的构成程序的构成2.2数据类型、变量和常量数据类型、变量和常量2.3运算符和表达式运算符和表达式2.4流程控制流程控制2.5数组数组习习题题Java实用教程学习目的与要求:学习目的与要求:深刻理解并熟记深刻理解并熟记Java的语法规范。的语法规范。熟练使用各种数据类型的定义、表示和引用。熟练使用各种数据类型的定义、表示和引用。熟练使用各种控制语句。熟练使用各种控制语句。熟练使用一维数组熟练使用一维数组 Java实用教程文件命名规则总则:文件名必须与类名一致类名一致。(1 1)如果文件只有一个类,那么文件名必须与类)如果文件只有一个类,

2、那么文件名必须与类名完全一致,包括大小写。名完全一致,包括大小写。(2 2)一个文件中,只能有一个)一个文件中,只能有一个publicpublic类;类;(3 3)如果文件中不只一个类,那文件名必须与声)如果文件中不只一个类,那文件名必须与声明为明为publicpublic的类名保持一致;的类名保持一致;Java实用教程(4 4)如果文件不只一个类,没有声明为)如果文件不只一个类,没有声明为publicpublic类,类,则文件名可以与其他类的名字中的一个保持一致;则文件名可以与其他类的名字中的一个保持一致;(5 5)如果类中有)如果类中有mainmain方法,并声明为方法,并声明为publi

3、cpublic类,类,mainmain方法必须位于方法必须位于publicpublic类中;类中;(6 6)如果类中有)如果类中有mainmain方法,没有声明为方法,没有声明为publicpublic类,类,文件名保存为与含有文件名保存为与含有mainmain方法的类名一致。方法的类名一致。Java实用教程/*检测类名与文件名的一致性*/class StudentTest public static void main(String args) Student aStudent=new Student(); aStudent.setName(“张楠”); aStudent.setStuden

4、tNum(“2010416001”); System.out.println(“学生的姓名是:”+aStudent.getName()+”,学号是:”+aStudent.getStudentNum();Java实用教程class People private String name; public String getName() return name; public void setName(String strName) name=strName;Java实用教程class Student extends People private String studentNum;public S

5、tring getStudentNum() return studentNum;public void setStudentNum(String strStudentNum)studentNum=strStudentNum;Java实用教程文件名只能保存为StudentTest.java才能运行。思考:在class StudentTest前面加上public后,再保存为People.java或Student.java,编译会出现什么情况。Java实用教程2.1Java程序的构成程序的构成2.1.1逻辑构成逻辑构成 Java源程序逻辑构成分为两大部分:程序头包的引用和类程序头包的引用和类的定义的

6、定义。1.程序头包的引用程序头包的引用 主要是指引用JDK软件包自带的包,也可以是自己定义的类。引用之后程序体中就可以自由应用包中的类的方法和属性等。Java实用教程2.类的定义类的定义 源程序必须必须有一个主类; 在应用程序中,主类为包含main方法的类; 在Applet中,主类为用户自定义的系统Applet类的扩展类。在Java源程序中,主类的名字同文件名主类的名字同文件名一致。 类的定义又包括类头声明类头声明和类体定义类体定义。类体中包括属性声明和方法描述。Java实用教程2.1.2物理构成物理构成 Java源程序物理上由三部分构成,分别为语句、块和空白语句、块和空白。 (1) 语句指一

7、行以分号“;”结束的语句。 (2) 块指用括号对界定的语句序列,块可以嵌套使用。 (3) 空白指语句之间、块内部或者块之间的空白行。空白不影响Java源程序的编译和运行,适当地运用空白,可以形成良好的代码风格。Java实用教程2.1.3注释语句注释语句行注释为以/开始的行;块注释以/*开始和开始和*/结束例如,下面的语句就是注释语句用来说明程序文件名称的。/程序文件名称为WelcomeApplet.java上述的语句注释可以更改为:/*程序文件名称为WelcomeApplet.java*/或/*程序文件名称为WelcomeApplet.java*/Java实用教程2.1.4标识符、关键字和转义

8、符标识符、关键字和转义符 在Java语言中,标识符是赋予变量、类和方法变量、类和方法等的名称。由编程者自己指定,但需要遵循一定的语法规范语法规范: (1) 标识符由字母、数字、下划线字母、数字、下划线(_)、美元符号、美元符号($)组成,但美元符号用得较少。 (2) 标识符从一个字母、下划线或美元符号开始。 (3) Java语言中,标识符大小写敏感大小写敏感,必须区别对待。 (4) 标识符没有最大长度的限制,但最好表达特定的意思。 (5) 标识符定义不能不能是关键字。Java实用教程例如:_abc , $ABC ,2A ,A# ,For,顺时 Java开发的命名习惯开发的命名习惯所有的命名要望

9、文生义望文生义,这样才具有良好的可读性Total,Sum,ShunshiStudent类名,接口名:每个单词的首字母大写首字母大写,其他字母小写小写 如类MyFirstJava,Player,Teacher属性,方法,,局部变量名:第一个单词全小写单词全小写,从第二个单词开始以后每个单词首字母大写首字母大写,其他字母小写 如方法 getName() setDoctorBirthday()常量:每个单词所有字母全部大写全部大写,单词之间用_来连接 java中使用final修饰 final int MARK_GREED=22;包名:所有字母全部小写全部小写 如package com.shunshi

10、.corejava.day01Java实用教程 _abc,$ABC,2A,A#,For,顺时顺时 关键字又称保留字,是指Java语言中自带的用于标志数据类型名或者程序构造名等的标识符,如public、double等。 Java实用教程关键字:对Java技术编译器有特殊的含义,可以被编译器识别执行abstract do implements private throw boolean double import protected throws break else instanceof public transient byte extends int return true case fal

11、se interface short try catch final long static void char finally native super volatile class float new switch while continue for null synchronized default if package thisJava实用教程Java关键字特点java关键字与c+很多相似,只要与c+一样的,它的含义都与c+中的相同有些关键字c+有,而java没有sizeof求出某种类型的变量的占内存的大小为什么c+有sizeof?因为不同机器内存占用空间大小不一样 16,32,64

12、位,取决于操作系统平台。为什么Java不需要?因为有JVM。java中的关键字都是小写的true、false和null为小写,而不是象在C+语言中那样为大写。严格地讲,它们不是关键字。Java实用教程有些关键字java没有取消保留保留下来,但它自己也不用它也不给程序员用goto和const不是Java编程语言中使用的关键字,而是保留字。什么是保留字?为什么保留下来但不能用?在java中final替代constgoto在c+代表无条件跳转,功能很好,但不能经常用,要谨慎。很多建议去掉goto关键字,没有理解goto真正含义。为什么c+到现在都没有删除掉goto?它有一个特殊使命Java中使用br

13、eak代替goto跳出一层循环 :break跳出多层循环:break outout是一个标号,可以跳到out标识处break避免滥用goto,把goto功能削弱了,只能跳到外层循环java中加入新的关键字新的关键字enumassertenum:枚举assert:断言Java实用教程表表2.1转转义义符符 转义符转义符是指一些有特殊含义的、很难用一般方式表达的字符,如回车、换行等。所有的转义符以反斜线()开头,后面跟着一个字符来表示某个特定的转义符,如表2.1所示。Java实用教程2.2数据类型、变量和常量数据类型、变量和常量2.2.1数据类型数据类型 Java编程语言定义了八种基本的数据类型(

14、见表2.2),共分为四类:整数类整数类(byte、short、int、long)、文本类、文本类(char)、浮点类、浮点类(double、float)和逻辑类和逻辑类(boolean)。Java实用教程表表2.2Java的数据类型的数据类型Java实用教程1.整数类整数类(1) 采用三种进制十进制、八进制和十六进制。2 十进制值是2;077 首位的0表示这是一个八进制的数值;0xBAAC 首位的0x表示这是一个十六进制的数值。(2) 具有缺省int。(3) 用字母“L”和“l”定义long。(4) 所有Java编程语言中的整数类型都是带符号的数字。Java实用教程 2.文本类文本类 (1)

15、代表一个16 bit Unicode字符。 (2) 必须包含用单引号( )引用的文字。 (3) 使用下列符号: a一个字符。 t-一个制表符。 u? -一个特殊的Unicode字符,?应严格使用四个十六进制数进行替换。Java实用教程 3.浮点类浮点类 默认为double类型,如果一个数字包括小数点或指数部分,或者在数字后带有字母F或f(float)、D或d(double),则该数字为浮点数。Java实用教程4.逻辑类逻辑类boolean数据类型有两种值:true和false。例如:boolean flag = true;上述语句声明变量flag为boolean 类型,它被赋予的值为true。

16、Java实用教程数据类型转换数据类型转换:分为分为自动类型自动类型转换和转换和强制类型强制类型转换转换自动类型转换自动类型转换:整型、浮点型、字符型数据可以混合运算。在执行运算时,整型、浮点型、字符型数据可以混合运算。在执行运算时,不同类的数据先转化为同一类型,然后进行运算。转换不同类的数据先转化为同一类型,然后进行运算。转换从低级到高级的顺序为:从低级到高级的顺序为:Short或或byteintlongfloatdoublechar强制类型转换强制类型转换高级高级数据要转换成低级数据需用强制类型转换,格式为:数据要转换成低级数据需用强制类型转换,格式为:(数据类型)数据(数据类型)数据或或(

17、数据类型)(表达式)(数据类型)(表达式) 注:逻辑类数据不能和其它类型的数据转换。Java实用教程强制类型转换:只要不能自动转换的,则只能是强制转换整型数据之间的强转:改变数据的符号;改变数值改变数据的符号;改变数值int a=0x2aff; byte b=(byte)a; b为-1强制转换的原理:从最低位开始取到目标类型长度为止整型之间的强转是保留二进制低位,去掉高位,需要考虑在内存中如何存储实型强转整型是保留整数,去掉小数,不考虑实型在内存中的如何存储byte+byte会自动提升为会自动提升为intbyte a1=1,a2=2;byte a3=a1+a2;(精度丢失)+=不进行类型提升不

18、进行类型提升byte c=3; c=c+3; c+=3;System.out.println(c);默认整型为默认整型为int,int,long提升为提升为float有精度丢失有精度丢失float fa=37; System.out.println(fa); int ia=(int)fa; System.out.println(ia);Java实用教程2.2.2变量与常量变量与常量 常量是指整个运行过程中不再发生变化的量 变量是指程序的运行过程中发生变化的量,通常用来存储中间结果,或者输出临时值。 变量的声明也指变量的创建。执行变量声明语句时,系统根据变量的数据类型在内存中开辟相应的存储空间并

19、赋予初始值。变量有一个作用范围,超出它声明语句所在的块就无效。Java实用教程lJava的常量的常量Java中的常量分为中的常量分为整数型常量、浮点型常量、布整数型常量、浮点型常量、布尔型常量、字符型常量和字符串常量尔型常量、字符型常量和字符串常量常量的定义格式为:常量的定义格式为:final常量类型常量类型常量名常量名1=常量值常量值,常量名常量名2=常量常量值值2.final是定义常量的关键字。是定义常量的关键字。Java中的常量值区分为不同的类型,类型可以是中的常量值区分为不同的类型,类型可以是Java中任何合法的数据类型中任何合法的数据类型 Java实用教程lJava的变量的变量Jav

20、a变量定义的格式:变量定义的格式:类型名类型名变量名变量名1,变量名,变量名2,;或:类型名或:类型名变量名变量名1=初值初值,变量名,变量名2=初值初值,;变量按作用域分类:变量按作用域分类:局部变量局部变量:在方法或方法的代码块中声明,作用域从该变量的定义:在方法或方法的代码块中声明,作用域从该变量的定义位置起到它所在的代码块结束。位置起到它所在的代码块结束。方法参数方法参数(形式参数形式参数):传递给方法的参数,作用域是这个方法。:传递给方法的参数,作用域是这个方法。异常处理参数:传递给异常处理代码,作用域是异常处理部分。异常处理参数:传递给异常处理代码,作用域是异常处理部分。注意:局部

21、变量必须先赋值再使用先赋值再使用局部变量的作用域是从定义它开始到定义它的代码块结束在同一重合范围内同一重合范围内不允许有2个同名局部变量出现Java实用教程类(成员)变量类(成员)变量:在类定义中声明,作用域是整个:在类定义中声明,作用域是整个类。类。在一个确定的域中,变量名应是唯一的。通常,一个在一个确定的域中,变量名应是唯一的。通常,一个域用大括号域用大括号来划定来划定Java实用教程 下面看一个使用各种类型变量声明并改变的示例。程序中pi为常量,s1、i1、l1、ch1、f1、d1、b1为全局变量,可以在方法change中发生改变,然后在方法main中输出。而s2、i2、l2、ch2、f

22、2、d2、b2是方法main的局部变量,它们的作用范围只局限于方法main中。 【例2.2】测试不同数据类型的变量,程序输出如图2.2所示。源程序代码如下:/程序文件名称为SetVariable.javapublic class SetVariable/全局变量Java实用教程static double pi = 3.141592654;/数学常量static short s1;static int i1;static long l1;static char ch1;static float f1;static double d1;static boolean b1;public static

23、 void main(String args)Java实用教程/局部变量short s2 = 35;int i2 = -32;long l2 = 34555L;char ch2 = A;float f2 = 897.89F;double d2 = 34.345;boolean b2 = false;/输出常量System.out.println(数学常量pi = + pi); /输出局部变量Java实用教程System.out.println(*局部变量*);System.out.println(短整型变量s2 = + s2);System.out.println(整型变量i2 = + i2)

24、;System.out.println(长整型变量l2 = + l2);System.out.println(字符变量ch2 = + ch2);System.out.println(浮点数类型f2 = + f2);System.out.println(双精度型变量d2 = + d2);System.out.println(布尔型变量b2 = + b2); /调用方法修改全局变量的值Java实用教程change();/输出全局变量的值System.out.println(*全局变量*);System.out.println(短整型变量s1 = + s1);System.out.println(整

25、型变量i1 = + i1);System.out.println(长整型变量l1 = + l1);System.out.println(字符变量ch1 = + ch1);System.out.println(浮点数类型f1 = + f1);System.out.println(双精度型变量d1 = + d1);System.out.println(布尔型变量b1 = + b1);Java实用教程 /方法:修改全局变量的值 public static void change() s1 = 125;i1 = 88;l1 = 987654321L;ch1 = B;f1 = 3.2590F;d1 =

26、-1.04E-5;b1 = true; Java实用教程图2.2 变量输出结果Java实用教程2.3运算符和表达式运算符和表达式 Java常用的运算符分为五类:算术运算符、赋值运算符、算术运算符、赋值运算符、关系运算符、布尔逻辑运算符、位运算符关系运算符、布尔逻辑运算符、位运算符。 表达式是由常量、变量、对象、方法调用和操作符组成的式子。表达式必须符合一定的规范,才可被系统理解、编译和运行。表达式的值就是对表达式自身运算后得到的结果。 根据运算符的不同,表达式相应地分为以下几类:算术表达式、关系表达式、逻辑表达式、赋值表达式,这些都属于数值表达式。Java实用教程2.3.1算术运算符及算术表达

27、式算术运算符及算术表达式Java中常用的算术运算符如下:+加运算符-减运算符*乘运算符/除运算符%取模运算(除运算的余数)+增量运算符 -减量运算符 Java实用教程【例例2.3】测试运算符及表达式,程序输出如图2.3所示。源程序代码如下:/程序文件名称为NumberOper.javapublic class NumberOperpublic static void main(String args)/变量初始化int a = 30;int b = 20;/定义结果变量int r1,r2,r3,r4,r5,r6,r7,r8,r9;/计算结果r1 = a + b;Java实用教程r2 = a-b

28、;r3 = a * b;r4 = a / b;r5 = a % b;r6 = a +;r7 = b-;r8 = + a;r9 = - b;/输出结果System.out.println(a = + a + b = + b); /a,b的值System.out.println(a+b = + r1);System.out.println(a-b = + r2);Java实用教程System.out.println(a*b = + r3);System.out.println(a/b = + r4);System.out.println(a%b = + r5);System.out.println

29、(a+ = + r6);System.out.println(b- = + r7);System.out.println(+a = + r8);System.out.println(-b = + r9); Java实用教程图2.3 程序输出结果Java实用教程2.3.2关系运算符关系运算符 关系运算符用于比较两个数据之间的大小关系,关系运算表达式返回布尔值,即“真”或“假”。Java中的常用关系运算符如下:= =等于! =不等于大于=大于等于 b;r4 = a = b;r6 = a b = + r3);System.out.println(a=b = + r5);System.out.prin

30、tln(a=b = + r6); Java实用教程图2.4 程序输出结果Java实用教程2.3.3布尔逻辑运算符布尔逻辑运算符表表2.3布尔运算符及规则布尔运算符及规则Java实用教程例如:Boolean a = false;Boolean b = true; a & b检测到a为假,则无需判断b的值,直接将值置为假;而b | a时检测到b为真,则无需判断a的值,直接将值置为真。Java实用教程 【例2.5】测试布尔表达式,程序输出结果如图2.5所示。源程序代码如下:/程序文件名称为TestLogic.javapublic class TestLogicpublic static void m

31、ain(String args)/变量初始化boolean a = false;boolean b = true;/定义结果变量boolean r1,r2,r3,r4,r5,r6;/计算结果Java实用教程r1 = !a;r2 = a & b;r3 = a | b;r4 = a b;r5 = a & b;r6 = a | b;/输出结果System.out.println(a = + a + b = + b);System.out.println(!a = + r1); System.out.println(a&b = + r2);System.out.println(a|b = + r3);

32、System.out.println(ab = + r4);System.out.println(a&b = + r5);System.out.println(a|b = + r6);Java实用教程图2.5 程序输出结果Java实用教程2.3.4位运算符位运算符Java中的常用位运算符如下:位求反&按位与|按位或按位异或右移不带符号右移Java实用教程位运算符的使用想要a高8位不变,低8位全变0 a&0xff00想要a高8位不变,低8为全变1 a|0x00ff想要a高8位不变,低8位求反 a0x00ff想要a高8位求反,低8位全为0 (a0xff00)&0xff00想要a的1,3,5,7位取

33、反,2,4,6,8位不变01010101值为85 所以 a85Java实用教程 【例2.6】测试位运算符,程序输出结果如图2.6所示。源程序代码如下:/程序文件名称为TestBit.javapublic class TestBitpublic static void main(String args)/变量初始化int a = 36;int b = 2;/定义结果变量int r1,r2;Java实用教程/计算结果r1 = a b;r2 = a b = + r1); System.out.println(a3)?5:3;则a的值为5。如果x = 2,则a的值为3。Java实用教程 对象运算符(i

34、nstanceof)用来判断一个对象是否属于某个指定的类或其子类的实例,如果是,返回真(true),否则返回假(false)。 例如: boolean b = userObject instanceof Applet用来判断userObject类是否是Applet类的实例。Java实用教程2.3.7优先级优先级表表2.5运算符优先级运算符优先级Java实用教程2.4流流程程控控制制 流程控制分为三种基本结构:顺序结构、分支结构和循环结构。分支结构包括单分支语句(if-else语句)和多分支语句(switch语句);循环结构包括次数循环语句(for语句)和条件循环语句(while语句)。Java

35、实用教程2.4.1分支语句分支语句分支语句分为两类:单分支语句和多选语句。1.if-else语句语句if-else语句的基本格式为:if(布尔表达式布尔表达式)语句或块语句或块1;else语句或块语句或块2;Java实用教程 【例2.7】测试if-else语句,如果x10,则输出x的值,并提示结果正确,否则输出x= 10,提示结果不正确。程序输出结果如图2.7所示。源程序代码如下:/程序文件名称为TestIf.javapublic class TestIf/声明全局变量xstatic int x;public static void main(String args)x = 12;if(x10

36、)Java实用教程 System.out.println(x = + x + 结果正确);else System.out.println(x = 10 + 结果不正确);change();System.out.println(修改x的值之后);if(x10)System.out.println(x = + x + 结果正确);elseSystem.out.println(x = 10 + 结果不正确);Java实用教程/change方法:修改x的值public static void change()x = 5; Java实用教程图2.7 程序输出结果Java实用教程2. switch语句sw

37、itch语句的基本格式为:switch(表达式表达式1)case表达式表达式2:语句或块语句或块2;break;case表达式表达式3:语句或块语句或块3;break;case表达式表达式4: 语句或块语句或块4;break;default:语句或块语句或块5;break;Java实用教程其中:(1) 表达式1的值必须与整型兼容。(2) case分支要执行的程序语句。(3) 表达式2、3、4是可能出现的值。(4) 不同的case分支对应着不同的语句或块序列。 (5) break表示跳出这一分支。 Java实用教程 【例2.8】测试switch语句,当x=1、2、3时,分别打印1、2、3,x不为

38、这三个值时,打印x的值。程序输出结果如图2.8所示。源程序代码如下:/程序文件名称为TestSwitch.javapublic class TestSwitchpublic static void main(String args)/声明变量xint x;x = 12; Java实用教程System.out.println(x=12时打印的值);choose(x);x = 3;System.out.println(x=3时打印的值);choose(x);/choose方法:switch语句结构public static void choose(int x)switch(x) Java实用教程c

39、ase 1:System.out.println(1);break;case 2:System.out.println(2);break;case 3:System.out.println(3);break;default:System.out.println(x); Java实用教程图2.8 程序输出结果 Java实用教程2.4.2for循环语句循环语句for循环语句实现已知次数的循环,其基本格式为:for(初始化表达式初始化表达式;测试表达式测试表达式;步长步长)语句或块语句或块;Java实用教程 其执行顺序如下: (1) 首先运行初始化表达式。 (2) 然后计算测试表达式,如果表达式为t

40、rue,执行语句或块;如果表达式为false,退出for循环。 (3) 最后执行步长。 Java实用教程 【例2.9】用for循环统计1100(包括100)之间数的总和。程序输出结果如图2.9所示。源程序代码如下:/程序文件名称为TestFor.javapublic class TestForpublic static void main(String args) int sum = 0; for(int i = 1; i=100; i+)sum += i; System.out.println(1到100(包括100)的数的总和为: + sum);Java实用教程图2.9 程序输出结果Jav

41、a实用教程2.4.3while循环语句循环语句 while循环语句实现受条件控制的循环,其基本格式为: while(布尔表达式) 语句或块; 当布尔表达式为true时,执行语句或块,否则跳出while循环。Java实用教程上面for循环语句的例子改为while语句后如下所示:int sum = 0;int i = 1;while (i=100)sum += i; i+;System.out.println(1到100(包括100)的数的总和为: + sum);Java实用教程2.4.4do语句语句do语句实现受条件控制的循环,其基本格式为:do语句或块语句或块;while(布尔表达式布尔表达式

42、)Java实用教程 先执行语句或块,然后再判断布尔表达式。与while语句不同,当布尔表达式一次都不为true时,while语句一开始判断就跳出循环,不执行语句或块,而在do语句中则要执行一次。上面那个例子改为do循环为: int sum = 0; int i = 1; do sum += i; i+; while (i=100); System.out.println(1到100(包括100)的数的总和为: + sum);Java实用教程3种循环结构如何选择,要考虑几个因素首先分析业务问题是否是用循环来实现分析业务问题判断我们是否已经预先知道循环次数如果预先知道循环次数知道循环次数:用for

43、循环如果预先不知道次数不知道次数:用while循环若至少要执行一次循环:用do.while循环3种不同的循环结构其实可以相互转化,按照上面的规则来选择可以简化编程Java实用教程l跳转语句跳转语句Breaklabel:在:在switch语句中,语句中,break语句用来语句用来跳过分支中的其它语句跳过分支中的其它语句 ;在循环语句中,break用来跳出当前的循环语句 Continuelabel:continue语句只用于循环结构,语句只用于循环结构,用来结束本次循环,即跳过循环体中位于用来结束本次循环,即跳过循环体中位于continue语句后面的尚未执的语句语句后面的尚未执的语句Return表

44、达式:表达式:return语句用于从当前方法中退语句用于从当前方法中退出出 Label:是指标号,只起到对语句标识的作用:是指标号,只起到对语句标识的作用Java实用教程2.5数组数组l数组数组 数组(array)是相同类型变量的集合。l数组变量是引用类型的变量,声明数组变量并不分配内存空间。l声明一个数组实质是要确定声明一个数组实质是要确定数组名数组名、数组的、数组的维数维数和数组元素的和数组元素的数据类型数据类型。Java实用教程2.5.1一维数组一维数组一、一维数组定义一、一维数组定义语法格式有两种:数组元素类型数组元素类型数组名数组名;或或数组元素类型数组元素类型数组名数组名如:如:i

45、ntintSno或或intintSno intSno:为数组名是符合Java标识符定义规则的用户标识符。Int:表示数组元素的数据类型为整型 方括号:数组的标志 Java实用教程Java语言中声明数组时不能指定其长度。int array6; Java实用教程二、初始化二、初始化 可以通过直接指定初值的方式来完成,也可以用new操作符来完成。 1直接指定初值的方式直接指定初值的方式 例 int a1=23,-9,38,8,65; Java实用教程数组a1的初始化Java实用教程 2用关键字用关键字new初始化数组初始化数组 用关键字new初始化数组,只为数组分配存储空间而不对数组元素赋初值。用关

46、键字new来初始化数组有两种方式: (1) 先声明数组,再初始化数组。格式如下: 类型标识符类型标识符数组名数组名;数组名数组名=new类型标识符类型标识符数组长度数组长度; 其中,第一条语句是数组的声明语句,第二条语句是初始化语句。inta;a=newint9;Java实用教程 (2) 在声明数组的同时用new关键字初始化数组。格式如下: 类型标识符类型标识符数组名数组名=new类型标识符类型标识符数组长度数组长度;或或类型标识符类型标识符数组名数组名=new类型标识符类型标识符数组长度数组长度;例如:int a=new int10;Java实用教程新创建的数组对象,其元素根据类型被设置为默

47、认的初始值。数值类型为0字符类型为u0000布尔类型为false引用类型为null每个数组都有一个属性length获取它的长度,例如:a.length指明数组a的长度(元素个数);Java实用教程三、数组元素引用三、数组元素引用数组名数组名数组下标数组下标其中:数组下标的取值从其中:数组下标的取值从0开始,下标值可以是开始,下标值可以是整数型整数型常量或整数型变量表达式常量或整数型变量表达式。对对intSno数组来说下面两条赋值语句是合法的:数组来说下面两条赋值语句是合法的:intSno4=32;intSno3+2=86;但但intSno6=12;是错误的。是错误的。Java实用教程增强的fo

48、r循环(JDK 1.5)JDK 1.5引入一个新的for循环,可以不用下标就可以依次访问数组元素。语法:for(elementType value : arrayRefVar) 例如for(intfor(int i = 0; i i = 0; i myList.lengthmyList.length; i+) ; i+) sum += sum += myListimyListi; for(doublefor(double value : value : myListmyList) ) sum += value;sum += value; Java实用教程【示例程序c6_1.java】 数组的声

49、明、初始化和其长度的测定。public class c6_1 public static void main(String arg ) int i; double a1 ;/ 放在变量后面声明 char a2; / 放在变量前面声明 a1=new double8;/为a1分配8个double型元素的存储空间(64字节) a2=new char8; /为a2分配8个char型元素的存储空间(16字节)Java实用教程int a3 =new int8;/在声明数组时初始化数组, 为a3分配32字节 byte a4=new byte8; /在声明数组时初始化数组,为a4分配8字节 char a5 =

50、A,B,C,D,E,F,H,I;/直接指定初值方式 /下面各句测定各数组的长度Java实用教程/以下各句引用数组中的每一个元素,为各元素赋值 for(i=0;i8;i+) a1i=100.0+i; a3i=i; a2i=(char)(i+97);/将整型转换为字符型 System.out.println(a1.length=+a1.length); System.out.println(a2.length=+a2.length); System.out.println(a3.length=+a3.length); System.out.println(a4.length=+a4.length)

51、; System.out.println(a5.length=+a5.length);Java实用教程 /下面各句打印各数组元素 System.out.println(ta1ta2ta3ta4ta5); System.out.println(tdoubletchartinttbytetchar); for(i=0;i8;i+) System.out.println(t+a1i+t+a2i+t+ a3i+t+a4i+t+a5i); Java实用教程该程序的运行结果如下:a1.length=8a2.length=8a3.length=8a4.length=8a5.length=8Java实用教程a

52、1 a2 a3 a4 a5double char int byte char100.0 a 0 0 A101.0 b 1 0 B102.0 c 2 0 C103.0 d 3 0 D104.0 e 4 0 E105.0 f 5 0 F106.0 g 6 0 H107.0 h 7 0 IJava实用教程数组下标的灵活使用数组下标的灵活使用【示例程序c6_2.java】 用数组求解Fibonacci数列的前20项,即使用数组下标表达式求解数学上的迭代问题。Java实用教程public class c6_2 public static void main(String args) int i; int

53、 f =new int20;/创建数组f,使其可存储20个整型数据 f0=1;f1=1; for(i=2;i20;i+) fi=fi-2+fi-1;/数组元素的下标使用循环变量 for(i=0;i20;i+) if(i%5=0)System.out.println(n); System.out.print(t+fi); Java实用教程运行结果是:1 1 2 3 58 13 21 34 5589 144 233 377 610987 1597 2584 4181 6765Java实用教程 【示例程序c6_3.java】 设数组中的数值是由小到大存放的,编写二分查找程序。import java.

54、io.*;class FindSearch int binarySearch(int arr ,int searchValue) int low=0;/ low是第一个数组元素的下标 int high=arr.length-1;/ high是最后一个数组元素的下标 int mid=(low+high)/2; / mid是中间那个数组元素的下标 while(low=high & arrmid!=searchValue) if( arrmidhigh) mid=-1; return mid;/ mid是数组元素下标,若为-1则表示不存在要查的元素 public class c6_3 public

55、static void main(String args)throws IOExceptionJava实用教程 BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in); int i,k,search,mid; String c1; int arr =2,4,7,18,25,34,56,68,89; System.out.println(打印原始数据); for(i=0;iarr.length;i+) System.out.print( +arri); System.out.println(n); Syst

56、em.out.println(请输入要查找的整数); c1=keyin.readLine( );Java实用教程 search=Integer.parseInt(c1); FindSearch p1=new FindSearch( ); mid=p1.binarySearch(arr,search); if(mid=-1) System.out.println(没找到!); else System.out.println(所查整数在数组中的位置下标是:+mid); Java实用教程运行结果:打印原始数据 2 4 7 18 25 34 56 68 89请输入要查找的整数 68所查整数在数组中的位

57、置下标是:7Java实用教程四、复制数组直接使用赋值语句不能实现数组的复制,结果是两个数组引用变量指向同一个数组对象。复制数组的方法使用循环来复制每个元素使用循环来复制每个元素使用使用System.arraycopy方法方法使用数组的使用数组的clone方法方法x: 1y : 1copy基本类型x : refy : refcopyarray数组类型Java实用教程可以把一个数组变量拷贝给另一个,这时两个变量引用同一个数组,如:int aa=1,2,3,4,5;int bb=aa;aabb12345Java实用教程Java.lang.System类的arraycopy()方法提供了数组元素复制功

58、能:int source=1,2,3;int dest =5,6,7,8,9;/ 复制源数组中从下标0开始的source.length个元素到/ 目的数组,从下标0的位置开始存储。System.arraycopy(source, 0, dest, 0, source.length); Java实用教程System.arraycopy(source,0,dest,0,source.length); sourcedest12356789sourcedest12312389Java实用教程五、向方法传递数组可以将数组变量作为实参传递给方法。基本数据类型传递的是实际值的拷贝,修改形参,不影响实参。数组

59、引用变量中传递的是对象的引用,修改形参,将改变实参引用的数组对象。 也可以从方法中返回数组。实参 : 1形参 : 1copy基本类型实参 : ref形参 : refcopyarray数组类型Java实用教程 日常生活中处理的许多数据,从逻辑上看是由若干行、若干列组成的。例如,矩阵、行列式、二维表格等。图6.8给出了一个简单的矩阵。为适应存放这样一类数据,人们设计出了一种如图6.9所示的数据结构二维数组。 2.5.2二二维维数数组组矩阵 Java实用教程 二维数组 Java实用教程 一、声明一、声明 二维数组的声明与一维数组类似,只是需要给出两对方括号,其格式如下:类型说明符类型说明符数组名数组

60、名;或或类型说明符类型说明符数组名;数组名;Java实用教程例如:声明数组名为arr的二维整型数组:int arr ; 或 int arr;其中:类型说明符可以是Java的基本类型和引用类型;数组名是用户遵循标识符命名规则给出的一个标识符;两个方括号中,前面的方括号表示行,后面的方括号表示列。 Java实用教程二、初始化二、初始化1用用new操作符初始化数组操作符初始化数组 用new操作符来初始化数组有两种方式:(1) 先声明数组再初始化数组。数组名数组名=new类型说明符类型说明符数组长度数组长度;或或 数组名数组名=new类型说明符类型说明符数组长度数组长度数组长度数组长度; 其中:对数组

61、名、类型说明符和数组长度的要求与一维数组一致。 Java实用教程例如:int arra ; /声明二维数组arra=new int34;/初始化二维数组 上述两条语句声明并创建了一个3行4列的数组arra。也就是说arra数组有3个元素,而每一个元素又都是长度为4的一维数组。实际上共有12个元素,共占用12*4=48个字节的连续存储空间。这里的语句: arra=new int34;Java实用教程实际上相当于下述4条语句: arra=new int3 ;创建一个有3个元素的数组,且每个元素也是一个数组。arra0=new int4;创建arra0元素的数组,它有4个元素。arra1=new i

62、nt4;创建arra1元素的数组,它有4个元素。arra2=new int4;创建arra2元素的数组,它有4个元素。也等价于:arra=new int3 for(int i=0;i3;i+) arrai=new int4;Java实用教程 也就是说,在初始化二维数组时也可以只指定数组的行数而不给出数组的列数,每一行的长度由二维数组引用时决定。但不能只指定列数而不指定行数。 上述语句的作用如图6.11所示。Java实用教程语句“arra=new int34;”的作用 Java实用教程 (2) 在声明数组时初始化数组。格式如下: 类型说明符类型说明符数组名数组名=new类型说明符类型说明符数组长

63、度数组长度;或或类型说明符类型说明符数组名数组名=new类型说明符类型说明符数组长度数组长度数组长数组长度度;例如:int arr=new int4 ;int arr =new int43; 但是,不指定行数而指定列数是错误的。例如,下面的初始 化是错误的。 int arr=new int 4;Java实用教程2直接指定初值的方式直接指定初值的方式 在数组声明时对数据元素赋初值就是用指定的初值对数组初始化。例如:int arr1=3, -9,6,8,0,1,11,9,8 ; 此语句声明并初始化数组arr1,它有3个元素,每个元素又都是有3个元素的一维数组。用指定初值的方式对数组初始化时,各子数

64、组元素的个数可以不同。例如:int arr1=3, -9,8,0,1,10,11,9,8; Java实用教程它等价于:int arr1=new int3 ;int ar10=3,-9;int ar11=8,0,1;int ar12=10,11,9,8;Java实用教程测定数组的长度及数组赋值测定数组的长度及数组赋值 与一维数组一样,也可以用.length成员方法测定二维数组的长度,即元素的个数。只不过当使用“数组名数组名.length”的形式测定的是数组的行数;而使用“数组名数组名i.length”的形式测定的是该行的列数。例如,若有如下的初始化语句: int arr1=3, -9,8,0,1

65、,10,11,9,8 ; 则arr1.length的返回值是3,表示数组arr1有3行或3个元素。而arr12.length的返回值是4,表示arr12的长度为4,即有4个元素。Java实用教程【示例程序c6_11.java】 在程序中测定数组的长度。public class c6_11 public static void main(String arg ) int i,j; int len1 =new int2; int len2 =new int2; int a1=1,4,8,9,3,2,2; int a2 =90,3,9,12; int a1len=a1.length; /将a1数组的

66、长度赋给a1len int a2len=a2.length; /将a2数组的长度赋给a2lenJava实用教程 System.out.println(a1.length=+a1.length); for(i=0;i2;i+) len1i=a1i.length; /将a1数组的子数组的长度赋给len1i System.out.println(a1 .length=+len1i); for(i=0;i2;i+) for(j=0;jlen1i;j+) System.out.print( +a1ij); System.out.println(n); Java实用教程 System.out.printl

67、n(a2.length=+a2.length); /赋a2数组的子数组的长度 for(i=0;i2;i+) len2i=a2i.length; System.out.println(a2 .length=+len2i); /打印a2数组的值 for(i=0;i2;i+) for(j=0;jlen2i;j+) System.out.print( +a2ij); System.out.println(n); Java实用教程 a2=a1;/将a1数组赋给a2 System.out.println(a1.length=+a1.length); /赋a1数组的子数组的长度 for(i=0;i2;i+)

68、 len1i=a1i.length; System.out.println(a1 .length=+len1i); /打印a1数组的值 for(i=0;i2;i+) for(j=0;jlen1i;j+) System.out.print( +a1ij); System.out.println(n); Java实用教程 System.out.println(a2.length=+a2.length); /赋a2数组的子数组的长度 for(i=0;i2;i+) len2i=a2i.length; System.out.println(a2 .length=+len2i); /打印a2数组的值 fo

69、r(i=0;i2;i+) for(j=0;jlen2i;j+) System.out.print( +a2ij); System.out.println(n); System.out.println(n); Java实用教程a1.length=2a1 .length=4a1 .length=3 1 4 8 9 3 2 2a2.length=2a2 .length=2a2 .length=2 90 3 9 12a1.length=2a1 .length=4a1 .length=3 1 4 8 9 3 2 2a2.length=2a2 .length=4a2 .length=3 1 4 8 9 3

70、 2 2该程序的运行结果是: Java实用教程数组名作为成员方法的参数数组名作为成员方法的参数 与一维数组类似,二维数组的数组名也可以作为参数传递给成员方法。下面通过两个例题说明这个问题。 【示例程序c6_12.java】 编程实现在矩阵(用二维数组表示)中找最大数。class Maxvalue int maxvl(int arr1 ) int i,k,max; int len=arr1.length,len1;Java实用教程 max=arr100; for(i=0;i=len-1;i+) len1=arr1i.length; for(k=0;kmax) max=arr1ik; return

71、 max; public class c6_12 Java实用教程 public static void main(String args) int maxx; int arr =1,3,7,6,78,0,42,5,-98,7,10,-1; Maxvalue p1=new Maxvalue( ); maxx=p1.maxvl(arr); System.out.println(max=+maxx); 运行结果:max=78Java实用教程【示例程序c6_13.java】 两个矩阵相加。class AddClass void add(int arA ,int arB ,int arC ) int

72、i,k,len1; int len=arA.length; for(i=0;ilen;i+) len1=arAi.length; for(k=0;klen1;k+) arCik=arAik+arBik; Java实用教程public class c6_13 public static void main(String args) int i,k; int arA =1,3,7,6,78,0,42,5,-98,7,10,-1; int arB =1,3,7,6,78,0,42,5,-98,7,10,-1; int arC =new int34; int len=arA.length,len1;

73、AddClass p1=new AddClass( ); p1.add(arA,arB,arC); System.out.println(tAttBttC); for(i=0;ilen;i+)Java实用教程 len1=arAi.length; for(k=0;klen1;k+) System.out.print( +arAik);/打印第i行A矩阵 System.out.print(t); for(k=0;klen1;k+) System.out.print( +arBik);/打印第i行B矩阵 System.out.print(t); for(k=0;klen1;k+) System.out.print( +arCik);/打印第i行C矩阵 System.out.println(n); Java实用教程运行结果:A B C1 3 7 6 1 3 7 6 2 6 14 1278 0 42 5 78 0 42 5 156 0 84 10-98 7 10 -1 -98 7 10 -1 -196 14 20 -2

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号