数组:相同类型数据的有序集合
1、数组:是引用类型的数据
2、new:关键字,在堆内开辟空间
成员变量(堆内存):有默认值
局部变量(栈内存):没有默认值,使用之前需要赋值
3、引用变量赋值
int[] arr1={1,2,3,4};
int[] arr2=arr1;//引用变量,把arr1的值赋给arr2,arr2和arr1指向的是堆内存的同一块空间
数组的特性:相同了偶像数据的有序集合
1、数组定义:int[] scoreArr=new int[10]
2、数组的引用数据类型,scoreArr是引用类型的变量,new关键字在堆内存开辟空间
3、如果访问数据元素?数组是有顺序的,下标(索引)顺序,索引编号从0开始到数据元素个数-1结束,最大索引数组长度-1
4、数组的元素类型必须和声明类型一致,数组里的元素类型是相同的,不能是混合类型
5、数组可以是基本数据类型也可也是引用数据类型比如String
6、数组的长度scoreArr.length;(数组名.length)
7、数组长度一旦声明就固定了
8、数组元素有默认值
int:0
double:0.0
char:\u000
String:null-》引用数据类型默认值都是null
数组内存图
数组初始化
1、静态初始化:数组的声明,分配空间,赋值在一条语句中
int[] scoreArr=new int[]{1,2,3,4};
int[] scoreArr1={1,2,3,4};
2、动态初始化:数组的声明,分配空间,赋值不在一条语句中
int[] scoreArr2;//声明一个数组变量
scoreArr2=new int[5];//分配空间
scoreArr2[0]=1;//给数组各元素赋值
3、默认初始化:int[] scoreArr4=new int[6];
数组的多种声明方法
int[] scoreArr5=new int[20];
int scoreArr6[]=new int[10];
int[][] scoreArr7;
int scoreArr8[][;
int[] scoreArr9[];
数组常见错误
1、int[] score10=new int[]{1,2,3,4};//不要写维数
2、int[10] scoreArr11=new int[10];//int[10] scoreArr错,声明数组不写维数
数组常见异常
(1)java.lang.ArrayIndexOutOfBoundsException: 6:数组越界异常。
(2)int[] scoreArr=null;//声明一个数组变量;
System.out.println(scoreArr.length);// java.lang.NullPointerException
空指针异常
*/
public class Main {
public static void main(String[] args) {
int score=98;
int[] scoreArr = new int[]{1,2,3,4,5};
int[] scoreArr1=null;
for (int i = 0; i < scoreArr.length; i++) {
System.out.print(scoreArr[i]+",");
}
System.out.println();
// System.out.println(scoreArr[5]);//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 at (Main.java:12)
System.out.println(scoreArr1.length);//Exception in thread "main" java.lang.NullPointerException at (Main.java:13)
System.out.println(scoreArr.length);
}
}
数组引用变量赋值内存图
数组遍历
for each
for-each循环:
(1)jdk1.5引入;
(2)优点:简单;
(3)缺点:不能进行与索引有关的操作;
(4)如果只需遍历数组,用for-each循环。
public class TestArray2{
public static void main(String[] args){
int[] scoreArr=new int[10];
Scanner input=new Scanner(System.in);
//通过循环给数组元素赋值;
for(int i=0;i<10;i++){
System.out.print("请输入第"+(i+1)+"位同学的分数:");
scoreArr[i]=input.nextInt();
}
//1.for-each循环:
System.out.print("for-each循环:");
for(int score:scoreArr){
System.out.print(score+" ");
}
//2.普通for循环:
for(int i=0;i<10;i++){
System.out.print(scoreArr[i]+" ");
}
}
}
for each内存图