一维数组:
数组的定义:数组是指一组类型相同的数据的集合,数组中的每个数据被称作元素。
特点:
1.数组可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致。是一个对象,是一种引用数据类型。可以表示一组数据的集合。
2:数组只能保存一种类型的数据。
3:数组创建后元素默认有初始值。
4:数组中的每一个数据称为 元素 element。元素是在堆内存中分配的。而且是连续分配的。
5:数组的每一个元素都有一个序号,专业的称谓:下标、索引、角标。下标是从0开始的、升序的、连续的、0序的。
6:数组有一个属性:长度的属性,表示数组中元素的个数 该属性是 int 类型。 通过 数组名.length 来访问该属性。
7:数组中元素的下标的取值范围是:[0~length-1]。
8:通过new 关键字 在堆内存中元素被分配空间之后。每个元素被jvm 赋予默认值。
默认值规则:整数:0 浮点数:0.0 char:’\u0000’ boolean:false 引用数据类型:null。
9: 数组的每个元素通过 数组名[下标] 来访问。每个元素都是一个变量。和变量的用法一致。
10:数组变量、数组引用 保存的是 数组的实际元素的在堆内存中的"首地址"。
11: [] 代表的是 数组这种类型。
12:求下标是 n 的元素的地址:首地址+元素字节数*n。 数组根据下标访问元素的效率非常快。
13:数组的长度可以是 0,但是不能是 负数。
14:数组的长度一旦确定,就不能更改了。数组是定长的。
数组不进行初始化,系统默认初始化,不同类型数组元素的默认值如下表:
定义数组的方式有两种:
动态初始化:
1.先声明数组再创建数组
数据类型[] 数组名;//声明数组
数组名 = new 数据类型[长度];//创建数组
2.//声明数组并创建数组
数据类型[] 数组名 = new 数据类型[长度];
代码演示:
静态初始化:
1.类型[] 数组名 = new 类型[]{元素,元素,……};
2.类型[] 数组名 = {元素,元素,元素,……};
代码演示:
上述代码中,采用静态初始化的方式为每个元素赋予初值,其值分别是1、2、3、4。需要注意的是,文件中的第3行代码千万不可写成int[] x = new int[4]{1,2,3,4};,这样写编译器会报错。原因在于编译器会认为数组限定的元素个数[4]与实际存储的元素{1,2,3,4}个数有可能不一致,存在一定的安全隐患。
栈内存和堆内存的定义:
在方法中定义的一些基本类型的变量
和对象的引用变量
都在方法的栈内存中分配,当在一段代码块中定义一个变量时,Java就在栈内存中为这个变量分配内存空间,当超出变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立刻被另作他用。
堆内存用来存放由 new 运算符创建的数组或对象,在堆中分配的内存,由Java虚拟机的垃圾回收器来自动管理。在堆中创建了一个数组或对象后,同时还在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量实际上保存的是数组或对象在堆内存中的首地址(也称为对象的句柄),以后就可以在程序中使用栈的引用变量来访问堆中的数组或对象。
图例:
栈内存和堆内存的区别:
栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。
而堆内存中的对象对所有线程可见。堆内存中的对象可以被所有线程访问。
使用数组:
1.访问数组元素:数组名(索引)
2.给数组元素赋值:数组名【索引】=值;
常见错误:
1.数组下标越界异常:ArrayIndexOutOfBoundsException
2.空指针异常:NullPointerException
了解异常:所谓异常指程序中出现的错误,他会报告出错的异常类型、出错的行号以及出错的原因。
数组的常见操作:
1.数组遍历
在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。接下来通过一个案例学习如何使用for循环遍历数组。
2.数组最值
在操作数组时,经常需要获取数组中元素的最值。接下来通过一个案例来演示如何获取数组中元素的最大值。
3.数组排序
在操作数组时,经常需要对数组中的元素进行排序。下面为读者介绍一种比较常见的排序算法——冒泡排序。在冒泡排序的过程中,不断地比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程和水中气泡上升的原理相似。
冒泡排序:
二维数组:
第一种方式: 数据类型[][] 数组名 = new数据类型[行的个数][列的个数];
第二种方式: 数据类型[][] 数组名 = new int[行的个数][];
第三种方式: 数据类型[][] 数组名= {{第0行初始值},{第1行初始值},...,{第n行初始值}};
案例: