




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java编程基础及应用第4章数组Java编程基础及应用第四章数组4.1理解数组
4.2数组变量的声明4.3数组的创建和初始化4.4数组的使用4.5Foreach循环4.6深入理解数组4.7多维数组4.8本章小结第四章数组4.1理解数组第四章数组4.1理解数组
4.2数组变量的声明4.3数组的创建和初始化4.4数组的使用4.5Foreach循环4.6深入理解数组4.7多维数组4.8本章小结第四章数组4.1理解数组4.1理解数组Java的数组是具有相同的数据类型的数组元素的集合。一旦数组的初始化完成,数组在内存中所占的空间将被固定下,因此数组的长度将不可改变。Java的数组既可以存储基本数据类型,也可以存储引用类型的数据。值得指出的是,数组也是一种数据类型,它本身是一种引用类型。例如int是一个基本类型,但int[]就是一种引用类型。4.1理解数组Java的数组是具有相同的数据类型的数组元素第四章数组4.1理解数组
4.2数组变量的声明4.3数组的创建和初始化4.4数组的使用4.5Foreach循环4.6深入理解数组4.7多维数组4.8本章小结第四章数组4.1理解数组4.2数组变量的声明声明数组,包括声明数组的名字、数组包含的元素的数据类型。Java中支持两种语法格式来声明数组:
数组元素类型数组名[];
数组元素类型[]数组名;例如:intiArray[]或者int[]iArray表示int类型数组,数组中存放的是int类型的数据4.2数组变量的声明声明数组,包括声明数组的名字、数组包含第四章数组4.1理解数组
4.2数组变量的声明4.3数组的创建和初始化4.4数组的使用4.5Foreach循环4.6深入理解数组4.7多维数组4.8本章小结第四章数组4.1理解数组4.3数组的创建和初始化4.3.1创建数组对象4.3.2数组的初始化(1)静态初始化(2)动态初始化4.3数组的创建和初始化4.3.1创建数组对象4.3.1创建数组对象
声明一个数组时仅为数组指定了数组名和元素的数据类型,并未指定数组元素的个数,系统无法为数组分配存储空间。
要让系统为数组分配存储空间,必须指出数组元素的个数,该工作在创建数组对象时进行。4.3.1创建数组对象声明一个数组时仅为数4.3.1创建数组对象数组对象和其他Java对象一样,也用new语句创建;
数组名=new类型标识符[元素个数];元素个数通过整型常量来表示。例如:要表示10个学生的成绩(整型),可以先声明元素的数据类型为int的数组score,再用new运算符初始化数组。 intscore[]; score=newint[10];4.3.1创建数组对象数组对象和其他Java对象一样,也4.3.2数组的初始化(1)静态初始化静态初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组的长度。
静态初始化的语法格式如下:
数组名=new类型标识符[]{数组元素1,数组元素2,数组元素3,...}
例如:对包含10个学生成绩的score数组进行初始化。 Score=newint[]{65,34,78,81,92,89,94,76,67,86};
4.3.2数组的初始化(1)静态初始化4.3.2数组的初始化除此之外,静态初始化还有如下简化的语法格式:
数组名={数组元素1,数组元素2,数组元素3,...}在实际开发过程中,可能更习惯将数组定义和初始化同时完成,代码如下: int[]Score={65,34,78,81,92,89,94,76,67,86};4.3.2数组的初始化除此之外,静态初始化还有如下简化的4.3.2数组的初始化(2)动态初始化动态初始化时由程序指定数组的长度,由系统为每个数组元素指定初始值。动态初始化的语法格式如下:
数组名=new类型标识符[元素个数];
例如: int[]score=newint[5];4.3.2数组的初始化(2)动态初始化4.3.2数组的初始化执行动态初始化时,程序员只需要指定数组的长度,即为每个数组元素指定所需的内存空间,系统将负责为这些数组元素分配初始值。数据类型默认初值byte0short0int0long0float0.0double0.0char’\u0000’booleanfalse4.3.2数组的初始化执行动态初始化时,程序员只需要指定第四章数组4.1理解数组
4.2数组变量的声明4.3数组的创建和初始化4.4数组的使用4.5Foreach循环4.6深入理解数组4.7多维数组4.8本章小结第四章数组4.1理解数组4.4数组的使用数组最常用的用法就是访问数组元素,包括对数组元素进行赋值和取出数组元素的值。在Java编程语言中,对数组元素进行访问通过数组名和下标:
数组名[下标]
下标值从0开始,到数组元素个数减1,如果数组元素是5个,下标从0到4。
通过调用数组的length方法可以获得一个数组的元素个数(数组长度)。4.4数组的使用数组最常用的用法就是访问数组元素,包括对数第四章数组4.1理解数组
4.2数组变量的声明4.3数组的创建和初始化4.4数组的使用4.5Foreach循环4.6深入理解数组4.7多维数组4.8本章小结第四章数组4.1理解数组4.5Foreach循环Java中引入了一种增强的foreach循环形式,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组和集合时,无须获得数组和集合的长度,foreach循环自动遍历数组和集合的每个元素,其定义如下: for(typevariableName:array|collection) { //variableName自动迭代访问每个元素 }4.5Foreach循环Java中引入了一种增强的fore4.5Foreach循环例4.2foreach循环来遍历数组元素程序运行结果:65347881924.5Foreach循环例4.2foreach循环来遍历第四章数组4.1理解数组
4.2数组变量的声明4.3数组的创建和初始化4.4数组的使用4.5Foreach循环4.6深入理解数组4.7多维数组4.8本章小结第四章数组4.1理解数组4.6深入理解数组4.6.1内存中的数组4.6.2基本数据类型数组的初始化4.6.3引用类型数组的初始化4.6深入理解数组4.6.1内存中的数组4.6.1内存中的数组数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来进行访问数组元素。4.6.1内存中的数组数组引用变量只是一个引用,这个引用变4.6.1内存中的数组实际的数组对象被存储在堆(heap)内存中;如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈(stack)内存中。数组在内存中的存储示意图如图4-1所示。图4-1数组在内存中的存储示意图4.6.1内存中的数组实际的数组对象被存储在堆(heap)4.6.1内存中的数组例4.4 数组之间直接赋值。
运行上面的代码后,将可以看到先输出k数组的长度为4,然后依次输出p数组和k数组的每个数组元素,接着会输出k数组的长度为3。4.6.1内存中的数组例4.4 数组之间直接赋值。4.6.1内存中的数组下面结合示意图说明上面程序的运行过程
当程序定义并初始化了p,k两个数组后,系统内存中实际上产生了4块内存区,其中栈内存中有两个引用变量:p和k;堆内存中也有两块内存区,分别用于存储p和k引用所指向的数组本身。此时计算机内存的存储示意图如图4-2所示。图4-2定义并初始化p,k数组后的存储示意图4.6.1内存中的数组下面结合示意图说明上面程序的运行过程4.6.1内存中的数组当执行上面的粗体字标示代码k=p时,系统会把p的值赋给k,p和k都是引用类型变量,存储的是地址。因此把p的值赋给k后,就是让k指向p所指向的地址。此时计算机内存的示意图如图4-3所示。图4-3k引用指向p引用所指向数组后的存储示意图4.6.1内存中的数组当执行上面的粗体字标示代码k=p时,4.6.2基本数据类型数组的初始化对于基本类型数组而言,数组元素的值直接存储在对应的数组元素中,因此,初始化数组时,先为该数组分配内存空间,然后直接将数组元素的值存入对应数组元素中。4.6.2基本数据类型数组的初始化对于基本类型数组而言,数4.6.2基本数据类型数组的初始化例4.5基本数据类型数组初始化4.6.2基本数据类型数组的初始化例4.5基本数据类型数4.6.2基本数据类型数组的初始化下面将结合示意图详细介绍这段代码的执行过程。
执行第一行代码int[]Array;时,仅定义一个数组变量,此时内存中的存储示意图如图4-4所示。图4-4定义Array数组变量后的存储示意图4.6.2基本数据类型数组的初始化下面将结合示意图详细介绍4.6.2基本数据类型数组的初始化
当执行Array=newint[5];动态初始化后,系统将负责为该数组分配内存空间,并分配默认的初始值;所有数组元素都被赋值为0,此时内存中的存储示意图如图4-5所示。图4-5动态初始化Array数组后的存储示意图4.6.2基本数据类型数组的初始化当执行Ar
当循环为该数组的每个数组元素依次赋值后,此时每个数组元素的值都变成程序显式指定的值。显式指定每个数组元素值后的存储示意图如图4-6所示。4.6.2基本数据类型数组的初始化图4-6显式为每个数组元素赋值后的存储示意图当循环为该数组的每个数组元素依次赋值后,此时每引用类型数组的数组元素是引用,因此情况变得更加复杂。每个数组元素里存储的还是引用,它指向另一块内存,这块内存里存储了有效数据。为了更好地说明引用类型数组的运行过程,下面先定义一个Person类。4.6.3引用类型数组的初始化引用类型数组的数组元素是引用,因此情况变得更加复杂。每个数组下面程序定义一个Person[]数组,接着动态初始化这个Person[]数组,并为这个数组的每个数组元素指定值。4.6.3引用类型数组的初始化下面程序定义一个Person[]数组,接着动态初始化这个Pe下面将结合示意图详细介绍这段代码的执行过程。
执行Person[]students;代码时,这行代码仅仅在栈内存中定义了一个引用变量,也就是一个指针,这个指针并未指向任何有效的内存区。此时内存中存储示意图如图4-7所示。4.6.3引用类型数组的初始化图4-7定义一个students数组变量后的存储示意图下面将结合示意图详细介绍这段代码的执行过程。4.6.3引用
执行初始化,程序对students数组执行动态初始化,系统为数组元素分配默认的初始值:null,即每个数组元素的值都是null。执行动态初始化后的存储示意图如图4-8所示。4.6.3引用类型数组的初始化图4-8动态初始化students数组后的存储示意图执行初始化,程序对students数组执行动
接着的代码定义了wang和liao两个Person实例,定义这两个实例实际上分配了4块内存,在栈内存储了wang和liao两个引用变量,还在堆内存中存储了两个Person实例。此时的内存存储示意图如图4-9所示。4.6.3引用类型数组的初始化图4-9创建两个实例后的存储示意图接着的代码定义了wang和liao两个Pers然后,程序依次将wang赋给students数组的第一个元素,把liao赋给students数组的第二个元素,students数组的两个数组元素将会指向有效的内存区。此时的内存存储示意图如图4-10所示。4.6.3引用类型数组的初始化图4-10为数组元素赋值后的存储示意图然后,程序依次将wang赋给students数组从图4-10中可以看出,此时wang和students[0]指向同一内存区,而且它们都是引用类型变量,因此通过wang和students[0]来访问Person实例的字段和方法的效果完全一样,不论修改students[0]所指向的Person实例的字段,还是修改wang变量所指向的Person实例的字段,所修改的其实是同一个内存区,所以必然互相影响。4.6.3引用类型数组的初始化从图4-10中可以看出,此时wang和students[0]第四章数组4.1理解数组
4.2数组变量的声明4.3数组的创建和初始化4.4数组的使用4.5Foreach循环4.6深入理解数组4.7多维数组4.8本章小结第四章数组4.1理解数组Java语言里提供了支持多维数组的语法。Java语言里的数组类型是引用类型,因此,数组变量其实就是一个引用,这个引用指向真实的数组内存。数组元素的类型也可以是引用,如果数组元素的引用再次指向真实的数组内存,这种情形看上去很像多维数组。前面定义一维数组的语法:type[]arrName;,这是典型的一维数组的定义语法,其中type是数组元素的类型。如果希望数组元素也是一种引用,而且是指向int数组的引用,则可以把type具体成int[],那么上面定义数组的语法就是int[][]arrName。4.7多维数组Java语言里提供了支持多维数组的语法。Java语言里的数组把int类型扩大到Java的所有类型,则出现了定义二维数组的语法: type[][]arrName;接着对二维数组进行初始化,同样可以把这个数组当成一维数组来初始化,其元素的类型是type[]类型,则可以采用如下语法进行初始化: arrName=newtype[length][];
上面的初始化语法相当于初始化了一个一维数组,这个一维数组的长度是length。同样,因为这个一维数组的数组元素是引用类型的,所以系统为每个数组元素都分配初始值:null。4.7多维数组把int类型扩大到Java的所有类型,则出现了定义二维数组的使用newtype[length][]初始化这个数组后,相当于定义了length个type[]类型的变量,当然,这些type[]类型的变量都是数组类型,因此必须再次初始化这些数组。例4.7示范了如何把二维数组当成一维数组处理。4.7多维数组使用newtype[length][]初始化这个数组后,相下面结合示意图来说明这个程序的执行过程。
程序的第一行int[][]a;,将在栈内存中定义一个引用变量,这个变量并未指向任何有效的内存空间,此时的堆内存中还未为这行代码分配任何存储区。4.7多维数组下面结合示意图来说明这个程序的执行过程。4.7多维数组4.7多维数组
程序对a数组执行初始化:a=newint[4][];,这行代码让a变量指向一块长度为4的数组内存,这个长度为4的数组里每个数组元素都是引用类型,系统为这些数组元素分配默认的初始值:null。此时a数组在内存中的存储示意图如图4-11所示。图4-11二维数组当成一维数组初始化的存储示意图4.7多维数组程序对a数组执行初始化:a=ne接下来的程序对a[0]元素执行初始化,即让图4-11右边堆内存中的第一个元素指向有效的数组内存,指向一个长度为2的int数组。因为程序采用动态初始化a[0]数组,因此系统将为a[0]所引用数组的每个元素分配默认的初始值:0,然后程序显式为a[0]数组的第二个元素赋值为6。此时在内存中的存储示意图如图4-12所示。4.7多维数组图4-12初始化a[0]后的存储示意图接下来的程序对a[0]元素
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025兽医执业考试生理学试题及答案
- 中职电子商务市场营销案例分享与分析试题及答案
- 个人经验2024年图书管理员试题及答案
- 2024投资咨询课程的更新试题及答案
- 企业社保补充合同样本
- 一份商品购销合同范本
- 人事局劳动合同范本
- 协助患者翻身操作流程
- 一日保教流程培训
- 2024年五年级英语下册 Unit 2 Can I help you Lesson 7教学实录 人教精通版(三起)
- 利用DeepSeek提升教育质量和学习效率
- 2025健身房租赁合同范本模板
- 邢台2025年河北邢台学院高层次人才引进100人笔试历年参考题库附带答案详解
- 2025年长春职业技术学院单招职业技能考试题库汇编
- 中考政治复习方案第二单元法律与秩序考点16违法犯罪教材梳理
- 《重大火灾隐患判定方法》知识培训
- 2025年台州职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 加油站台账记录模板
- 2025年江苏苏州市(12345)便民服务中心招聘座席代表人员高频重点提升(共500题)附带答案详解
- Unit6Topic2SectionB公开课课件仁爱英语八年级下册
- DB4501T 0008-2023 化妆品行业放心消费单位创建规范
评论
0/150
提交评论