数组的定义
定义格式
- 数据类型 [] 数组名=new 数据类型[长度]
(1)数据类型:即数组中存储元素的数据类型,可以是基本数据类型,也可以是引用数据类型。
(2)[]:表示数组。
(3)数组名:数组的变量名,遵循标识符命名规范。
(4)new:创建数组的关键字,通过new开辟空间。
(5)长度:即数组长度,数组最多能够存放元素的个数,数组长度在定义时指定,不可更改。 - 数据类型 [] 数组名=new 数据类型[]{元素1,元素2,…};
优点:定义时元素是确定的,避免内存空间的浪费。 - 数据类型[] 数组名={元素1,元素2,元素3,…};
public class ArrayDemo1{
public static void main(String[]args){
int [] arr1=new int [3];//虽然数组定义好了,但是具体储存哪三个数,不确定。
int [] arr2=new int [] {1,2,3};
int [] arr3={1,2,3};
}
}
数组的访问
1.定义:通过数组的索引访问数组的元素。
(1)索引:也叫下标、脚标,是数组元素距离数组起始位置的偏移量。
第一个元素的偏移量为0,所以数组的索引从0开始。
(2)格式:数组名[索引]
取值:数组名[索引]
赋值:数组名[索引]=值;
(3)注意:数组下标越界的问题。
2.
public class ArrayDemo2{
public static void main(String[]args){
int []arr={11,22,33};
//输出第3个元素的值,它的索引是2。
System.out.println(arr [2]);
//将数组第一个元素的值改为10。
arr [0]=10;
System.out.println(arr [0]);
}
}
数组的遍历
需求:给定一个int型数组,输出数组中的每一个元素。
public class ArrayDemo3{
public static void main(String []args){
/*1.直接输出数组变量名,得到的是数组的内存地址值。
2.数组中未手动赋值的元素,其实是有默认值的,
例如:int 型数组默认值是0,double型数组默认值是0.0。
3.数组的长度: 数组名.length
数组的最大索引: 数组的长度-1。
*/
int [] arr=new int [5];
arr [0]=1;
arr [1]=2;
arr [2]=3;
System.out.println(arr);
//传统做法;遍历数组。
System.out.println(arr [0] );
System.out.println(arr [1] );
System.out.println(arr [2] );
System.out.println(arr [3] );
System.out.println(arr [4] );
System.out.println("arr数组的长度是:"+arr.length);
System.out.println("arr数组的最大索引是:"+(arr.length-1) );
System.out.println("---------");
//通过for循环遍历数组,打印数组中每个元素的值。
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
输出结果
1
2
3
0
0
[I@3ac3fd8b
arr数组的长度是:5
arr数组的最大索引是:4
————————————
1
2
3
0
0
数组的初始化
在内存中为数组开辟连续空间并为每个元素赋值的过程。
内存:计算机的重要组件,用于程序运行中临时储存数据。
连续空间:数组元素在内存中的存放位置是连续的。
1.(1)动态初始化:只指定长度,由系统给出默认值
整数型:0
浮点型:0.0
字符型:’\u0000’(空字符)
布尔型:false
引用类型:null
(2)静态初始化:给出初始化值,由系统决定数组长度。
2.Java程序的内存分配
(1)方法区:储存可运行的class文件,包含方法,静态成员,常量等。
(2)栈:方法运用时使用的内存,特点是“后进先出”,即最先进入栈区的方法最后出栈,比如main方法。
(3)堆:存储new出来的数组或对象。
(4)本地方法栈:JVM在调用操作系统功能时使用,与开发无关。
(5)寄存器:CPU使用,与开发无关。
数组类型:变量arr储存的是数组在堆 内存中的地址值,而不是数组元素的值,变量arr通过内存地址引用堆内存中的数组,
所以数组是引用类型。