Java - 一维数组 June 1,2019
一、数组:
1.对于数组的理解:数组是一组数据类型相同的数据的组合,将这些数据统一的管理起来。
2.存储类型:数组本身是一个引用类型,数组内存储的类型可以是基本类型也可以是引用类型。
3.特点:
①数组本身是一个引用数据类型;
②数组是在堆内存中的一串连续的地址存在;
③数组在初始化时必须指定长度;
④堆内存的数组空间长度一旦确定就不能再次改变;
⑤栈内存的变量汇中存储的是数组的地址引用;
⑥数组内部存储的类型可以是基本的也可以是引用的。
4.数组的声明:
数组类型 [] 数组名字 int [] x; char [] y; boolean [] z; String [] m;
二、数组的初始化:
1.静态初始化:在定义数组的同时就为数组元素分配空间并赋值。
简化格式 | 数据类型 [] 数组名称 = {值,值,值.......} | int [] array = {1, 2, 3 ,4 ,5}; |
完整格式 | 数据类型 [] 数组名称 = new 数据类型[] {值,值,值......} | int [] array = new int[] {1, 2, 3, 4, 5}; |
public class ArrayDemo { public static void main(String args[]) { int data[] = {1, 2, 3, 4}; for(int i = 0; i < data.length; i++) { System.out.println(data[i]); } } }
2.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行。
简化格式 | ||
完整格式 | 数据类型 [] 数组名称 = new 数据类型[数据长度] | int [] array = new int[5]; |
数组的动态初始化 public class ArrayDemo { public static void main(String args[]) { int data[] = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 1; // 第一个元素 data[1] = 2; // 第二个元素 data[2] = 3; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } } 采用分步的模式开辟数组空间 public class ArrayDemo { public static void main(String args[]) { int data[] = null; data = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } }
注意:动态初始化无值并不是真的无值,它有默认值。
整数类型默认值:0
浮点类型默认值:0.0
字符类型默认值:0 --- char 97 --- ‘a’ 65 --- ‘A’ 48 --- ‘0’
布尔类型默认值:false
引用类型默认值:null
三、数组的操作:
1.当数组开辟空间后,就可以采用如下的方式进行操作:
①数组的访问通过索引完成,即:“ 数组名称[索引] ”,数组的索引从0开始,索引范围为[ 0 ~ 数组长度-1],若访问超过数组的索引范围,则会产生java.lang.ArrayIndexOutOfBoundsException的运行异常信息;
②当数组采用动态初始化开辟空间后,数组中的每一个元素都是该数组对应数据类型的默认数值;
③数组本身是一个有序的集合操作,所以对于数组的内容操作往往会采用循环的模式完成,如通过for循环、增强型for循环对数组进行操作;
④在Java中提供有一种动态取得数组长度的方式:数组名称.length;
⑤数组属于引用数据类型,所以在数组使用之前一定要开辟空间[实例化],如果使用了没有实例化的数组则会出现NullPointerException的异常信息。
2.数组的遍历:
1.使用普通for循环遍历数组: public class ArrayDemo { public static void main(String args[]) { int data[] = {1, 2, 3, 4}; for(int i = 0; i < data.length; i++) { System.out.println(data[i]); } } }
2.使用增强型for循环遍历数组: public class ArrayDemo { public static void main(String args[]) { int data[] = {1, 2, 3, 4}; for (int var :data){ System.out.println(var); } } }
3.基本数据类型和引用数据类型在内存结构上的区别:
①所有的变量空间都存储在栈内存;
②变量空间可以存储的基本数据类型也可以存储引用数据类型;
③如果变量空间存储的是基本数据类型,存储的是值,一个变量的值改变,另一个不会跟着改变;
④如果变量空间存储的是引用数据类型,存储的是引用地址,一个变量地址对应的值改变,另一个也会跟着改变。