数组的定义和使用
要求定义100个整型变量: int i1,i2,i3,...i100.
再要求输出这100个变量,会变得特别繁琐
数组:一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身属于引用数据类型,涉及到内存分配。
数组的动态初始化:
- 声明并开辟数组: 数据类型 [ ] 数组名称 = new 数据类型 [长度]
数据类型 数组名称 [ ] = new 数据类型 [长度]
- 分布进行数组空间开辟(实例化):
(1)声明数组: 数据类型 数组名称 [ ] =null;
(2) 开辟数组空间:数组名称 = new 数据类型 [长度];
范例:定义一个整型数组
public class ArrayDemo{
public static void main(String args[]){
int data [] = new int [3]; //开辟了一个长度为3的数组
}
}
数组的访问用索引的方式,数组名称[索引],索引从0开始。
声明并开辟数组时,数组中的每一个元素都是对应的数据类型的默认值;
超过数组的索引范围,会产生“ArrayIndexOutBoundException”异常。
数组本身是一个有序的集合,索引通常用for循环。
在java中动态取得数组长度的方法:数组名称.length
实例:数组赋值
public class ArrayDemo{
public static void main(String args[]){
int data [] = new int [3]; //开辟了一个长度为3的数组
data [0] = 10;
data [1] = 20;
data [2] = 30;
for(int i = 0;i<data.length;i++){
System.out.println(data [x]);
}
}
}
数组是属于引用数据类型,所以在使用数组时一定要进行数组的实例化。
在实际开发中,会更多的使用数组概念,而直接使用数组大部分情况都是为了数组的for循环输出。
范例:观察一个程序
public class ArrayDemo{
public static void main(String args[]){
int data [] = null; //开辟了一个长度为3的数组
data = new int[3];
data [0] = 10;
data [1] = 20;
data [2] = 30;
}
}
一个栈内存只能保存一个堆内存的地址,看见new开辟了堆内存,并开辟时是数组数据类型的默认值(0),在进行数组赋值时,按照索引进行修改,和对象的操作是相似的。
引用数据类型就有引用传递,同一块堆内存空间可以被不同的栈内存空间所指向。
范例:引用传递
public class ArrayDemo{
public static void main(String args[]){
int data [] = new int[3];
int temp [] = null; //声明数组
temp = data; //数组引用传递不要有[] ,[]是创建数组时用的
temp [0] = 90;
}
}
temp 和data指向了同一个堆内存空间,temp进行修改的时候,data数组的值也改变了,temp和data在栈内存中存的两个地址,但是指向的事同一个堆内存空间。
明显特点:先开辟内存空间,在通过索引进行数组值设定,成为动态初始化;定义时同时设置,成为静态初始化。
静态初始化:
简化格式:数据类型 数组名称 [ ] = {值,...,值}
完整格式:数据类型 数组名称 [ ] =new 数据类型 [ ] {值,...,值} (推荐)
范例:静态初始化定义数组
public class ArrayDemo{
public static void main(String args[]){
int data [] = {1,20,30,40,50,60,9,30,200};
for (int x=0; x<data.length;x++){
System.out.println(data[x]);
}
}
}
在匿名数组时,采用完整格式,因为匿名数组需要new,否则会报错。
public class ArrayDemo{
public static void main(String args[]){
System.out.println(new int [] {10,20,30,50,100}.length);
}
}
在实际开发中一定会用到数组,但是数组会有一个致命的缺点,长度是固定的。
二维数组:(基本不再使用)
如果一个数组需要行索引和列索引同时定位