Loading

5.数组

数组的定义和访问
  容器:是将多个数据存储到一起,每个数据称为该容器的元素
  数组的概念:数组是一种容器,用来存放多个数据值
数组的特点:
  1.数组是一种引用的数据类型
  2.数组当中的多个数据,类型必须统一
  3.数组的长度值程序运行期间不可改变
 
数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值
两种常见的初始化方式:
  1.动态初始化(指定长度)
  2.静态初始化(指定内容)
 
动态初始化的数组的格式:
  数据类型[]数组名称 = new 数据类型[数组长度];
格式解析:
  左侧的数据类型:也就是数组当中保存的数据,需要全部统一数据类型
  左侧的中括号[]:代表是一个数组
  左侧的数组名称:给数组取一个名字
  右侧的new:代表创建数组的动作
  右侧的数据类型:必须和左侧的数据类型保持一致
  数组长度:在该数组中,可以保存多少个数据,是一个int数字
  数组有定长特性,长度一旦指定,不可更改
数组拆分
数据类型 [] = 数组名;
数组名 = new 数据类型[数组长度];
 
静态初始化的数组格式:
  静态初始化:在创建数组的时候,不直接指定数据的个数多少,而是直接将具体的数据内容进行指定
  基本格式:
  数据类型[] 数据名称= new 数据类型[]{元素1,元素2,元素3,......}
 
省略格式:
  数据类型[] 数据名称 = {元素1,元素2,元素3....}
 
数组拆分
  数据类型 [] = 数组名;
  数组名 = new 数据类型[]{};
 
数组注意事项:
  1.静态初始化没有直接指定长度,但是仍然会自动推算得到长度
  2.静/动态初始化标准格式可以拆分为两个步骤
  3.静态初始化一旦使用胜利格式,就不能拆分为两个步骤
 
 
数组访问
 
  直接打印数组名称,得到的数组对应的内存地址哈希值
  访问数组元素的格式:数组名称[索引值]
  索引值:是一个int数字,代表数组当中元素的编号
  索引值从0开始,一致到数组长度-1为止
 
访问格式:数组名[索引];
 
 
使用动态初始化数组的时候,其中的元素有一个默认值,规则如下:
如果是整数是类型,默认为0
如果是浮点类型,默认为0.0
如果是字符类型,默认为‘\u0000’
如果是布尔类型,默认为false
如果是引用类型,默认为null
动态初始化赋值:
数组名[索引] = 值;
 
静态初始化其实也有默认值的过程,只不过系统自动马上将默认值替换成了大括号当中的具体数值
 
数组的长度属性
  每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可 以获取到数组的长度,语句为:数组名.length,属性length的执行结果是数组的长度,int类型结果。由次可以推断  出,数组的最大索引值为数组名.length-1
 
 
内存概述
  内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。Java       虚拟机要运行程序,必须要对内存进行空间的分配和管理
 
Java虚拟机的内存划分
  为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式
 
Java的内存需要划分为5个部分:
 
1.栈(tack):存放的都是方法中的局部变量
  局部变量:方法的参数。或者是方法{}中的变量
  作用域:一旦超出作用域,立刻从栈内存当中消失
 
2.堆(Heap): 凡是new出来的东西,都在堆当中
  堆内存里面的东西都有一个地址值:16进制
  堆内存里面的数据,都有默认值,规则:
  如果是整数是类型,默认为0
  如果是浮点类型,默认为0.0
  如果是字符类型,默认为‘\u0000’
  如果是布尔类型,默认为false
  如果是引用类型,默认为null
 
3.方法区(Method Area):存储.class相关信息,包含方法信息
 
4.本地方法栈(Mative Method Stack ):与操作系统相关
 
5.寄存器(pc Register): 与CPU相关
 
数组的内存图
 
 
 
数组的常见操作
 
数组的越界异常:
  创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运行后,将会抛出ArrayIndexOutOfBoundsException数组越界异常。在开发        中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码
 
数组空指针异常:
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出NullPointerException空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码,所有的引用类型变量,都可以赋值为null,代表为空,什么都没有
数组长度:
  获取数组长度
  格式:数组名称.length
  数组一旦创建,程序运行期间,长度不可改变
 
数组的遍历输出:
  遍历数组:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石
  循环的写法:数组的索引是0到lenght-1,可以作为循环的条件出现。
 
idea中,数组名.fori 自动补全遍历数组代码
 
数组小练习,取数组中最大值:
 
数组反转
  反转:数组中的元素颠倒顺序,例如原始数组为1,2,3,4,5,反转后的数5,4,3,2,1
  实现思想:数组最远端的元素互换位置。
  实现反转,就需要将数组最远端元素位置交换
  定义两个变量,保存数组的最小索引和最大索引
  两个索引上的元素交换位置
  最小索引++,最大索引--,再次交换位置
  最小索引超过了最大索引,数组反转操作结束
 
 
数组作为方法参数_传递地址
数组可以作为方法的参数
数组作为方法参数传递,传递的参数是数组内存的地址
 
数组作为方法返回值_返回地址
  一个方法可以有多个参数,但是只能有0或者一个返回值,不能有多个返回值
  如果希望一个方法中产生多个数据进行返回,可以使用一个数组作为返回值类型即可,通过数组索引进行访问不同的数据
  方法的参数为基本类型时,传递的数据值,方法的参数为引用类型时,传递的地址值
 

posted @ 2020-12-24 19:02  木子七  阅读(66)  评论(0编辑  收藏  举报