定义:
数组:数据是同一种数据类型数据的集合容器
数组的定义格式:
数据类型[ ] 变量名 = new 数据类型[ 长度 ] ;
int [] arr = new int [50];
左边 :
int [] arr ----声明了一个 int 类型的数组变量,变量名为 arr 。
int---------- 表明该数组只能存储 int 类型的数据
[ ] ---------- 这是一个数组类型
arr--------- 变量名
右边:
new int [50]; ---- 创建了一个长度为 50 的 int 类型数组对象。
new--------------- 创建数组对象的关键字
int ---------------- 表示该数组对象只能存储 int 类型的数据
[ ] ----------------- 表示是数组类型
50 ---------------- 该数组最多能存储 50 个数据,数组的容量
栈内存的特点:
栈内存存储的都是局部变量,变量一旦出了自己的作用域{ },那么马上就会从内存中小时,释放内存空间
局部变量:如果一个变量是在一个方法(函数)的内部声明的,那么该变量就是一个局部变量
成员变量:成员变量就是定义在方法之外,类之内的
对象数据:除了八种基本数据之外的数据,都是对象数据
注意:凡事以 new 关键字创建的对象, jvm 都会在栈内存中开辟一个新的空间,用于创建一个新的对象
堆内存的特点:
堆内存存储的都是对象数据,对象一旦被使用完,并不会马上从内存中消失,而是等待垃圾回收器不定时把垃圾对象回收,这时该对象才会消失,释放内存。
对象如果没有变量引用了,那么该对象就是一个垃圾对象了
public static void main( String [] args){
int [] arr = new int[4];//定义一个数组
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
aee[3] = 40;
System.out.println("arr[2] = " + arr[2]); //输出: arr[2] = 30
System.out.println("数组的容量:" + arr.length);//数组有一个length 的属性,可以看数组的 容量
System.out.println(arr); //输出了一个地址
//查看数组中的所有元素,需要进行遍历
for( int index = 0 ; index < arr.length ; index ++){
System.out.println(arr[index]);
}
}
= --------------(赋值运算符),这里的 = 是把数组对象内存地址赋予给 arr 变量
数组的好处:
对分配到数组对象中每一个数据都分配一个编号(索引值、角标、下标、),索引值的范围:0 ~ 长度 - 1
数组的内存分析:
//1:
public static void main( String [] args){
int [] arr1 = new int [2];
int [] arr2 = new int[2];
arr1[1] = 10;
arr2[1] = 20;
System.out.println(arr1[1]); // 输出10
}
// 2:
public static void main( String [] args){
int [] arr1 = new int [2];
int [] arr2 =arr1;
arr1[1] = 10;
arr2[1] = 20;
System.out.println(arr1[1]); // 输出20
}
// 3 :
public static void main( String [] args){
int [] arr1 = new int [2];
arr1[1] = 100;
int [] arr2 = arr1;
arr1[1] = 10;
arr2[1] = 20;
System.out.println(arr1[1]); // 输出20
}
数组中最常见的问题:
1、NullPointerEptionxce 空指针异常
原因:引用类型变量没有指向任何对象,而访问了对象的属性或者调用了对象的方法(引用类型:除了八种基本数据之外的类型)
public static void main( String [] args){
int [] arr = new int [2];
arr = null; // Null 让该变量不要有任何的对象,不要记录任何的内存地址
arr[1] = 10;
System.out.println(arr1[1]); // 报错 NullPointerEptionxce 空指针异常
}
2、ArrayIndexOutOfBoundsException 索引值越界
public static void main( String [] args){
int [] arr = new int [4];
arr[0] = 10;
arr[1] = 30;
arr[2] = 40;
arr[3] = 50;
System.out.println(arr1[4]); //访问索引值为4 的内存空间存储的值 报错
}
数组的初始化方式:
1、动态初始化
数据类型 变量名 = new 数据类型 [ 长度 ] ;
2、静态初始化
数据类型 [ ] 变量名 = { 元素1, 元素2, … } ;
public static void main( String [] args){
//动态初始化
// int [] arr = new int[10];
//静态初始化
int [] arr = { 10,20,30,40,50};
for( int index = 0 ; index < arr.length ; index ++){
System.out.println(arr[index],);
}
System.out.println("")
}
如果程序一开就已经确定了数据,那么这时候建议使用静态初始化
如果一开始数据还不太明确,建议使用动态初始化
public static void main( String [] args){
int [] arr = new int[50];
Scanner scanner = new Scanner(System.in);
for( int index = 0 ; index < arr.length ; index ++){
arr[index] = scanner.nextInt();
}
}