大一,正在学习java中,文章有什么不对的地方,欢迎大家交流指正,共同学习进步!
含义:是使用一个容器来存储一组相同数据类型数据的存储模型
定义格式:
元素数据类型[] 数组名=new 元素数据类型[元素个数];如:int[] arr=new int[3]
特点:
元素要一个一个赋值
如果你没有给某个位置的元素赋值,这个位置元素也是有默认值的
整型数据:默认值是0;浮点数:0.0;布尔类型:false;字符:空字符;引用数据类型:null
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
arr[0] = 10;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
/*
int 数组中的元素为int数据类型
[]定义数组
arr 数组变量名,小驼峰命名法
= 赋值运算符把数组在堆区申请内存空间的首地址赋值给数组名存储
new 给数组申请分配内存空间
3 是数组的长度 存放元素的个数 元素的个数: 决定数组一共要在内存中申请多大空间
总空间 = 元素个数 * 元素数据类型字节数
[I@7c30a502 [: 表示打印的是一个一维数组
I:表示数组中元素的数据类型, I就代表是int类型
@:普通的分隔符
7c30a502:是数组的内存地址,
这个数字是真正的地址通过hashCode的方法计算得到的,
由于前身还是内存中地址,所以java中就管这个值叫做内存地址,
表示方式是16进制的数据表示
*/
}
}
7.示意图表示数组访问原理:
栈内存首先是一片内存区域,存储的都是局部变量
堆内存:存储的是数组和对象(其实数组就是对象),反是new建立的都是在堆中
堆中存放的都是实体(对象);int[] arr=内存地址=[I@7c30a502
new int[3]==都会先在堆内存空间中开辟一块空间
栈空间通过内存地址访问堆内存
数组名赋值给另一个数组名, 则两个数组名存储一样地址, 他们两指向同一块堆区空间
静态初始化:初始化时指定每个数组元素初始值,由系统决定数组长度
静态初始化格式:
元素数据类型[] 数组名 = new 元素数据类型[]{元素1, 元素2, 元素3, …}
注意:
第二个中括号中不要写元素个数
大括号中元素的格式: 每个元素之间用逗号隔开, 最后一个元素后不写逗号
大括号中每个元素的数据类型和前面定义的元素数据类型相同
数组元素个数由静态初始化时赋值的个数决定
完整版和简化版的区别:
完整版数组名定义和赋值过程可以分离;
简化版定义和赋值不能分离
静态初始化适用于明确知道数组中应该放那些数据
Excetption in thread “main” java.lang.ArrayIndexOutOfBoundsException: 越界下标
数组越界异常产生的原因:
访问数组时访问了不存在的索引, 只要超出这个范围就会抛出数组越界异常
Exception in thread “main” java.lang.NullPointerExceptoion 空指针异常类
空指针异常:空: null,一旦一个引用类型变量被赋值为空, 它就不在记录堆区的某个地址
空指针异常的原因: 当引用类型变量不再指向任何位置时,还要使用这个变量,就会抛出这个空指针异常
解决空指针异常的方式: 在使用一个引用类型变量的时候,先判断它是否等于空,不等于空采取使用
使用循环遍历数组时的注意事项:
循环变量的范围 [0, 长度-1]
循环增量是 +1
循环判断条件: 下标变量 < 数组长度
public class ArrayDemo2 {
public static void main(String[] args) {
int[] arr={123,456,789,555,444,3333,22};
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
public class ArrayDemo3 {
public static void main(String[] args) {
int[] arr = {3,53,2,55,36,78,43,88};
// 定义一个变量max
int max = arr[0];
for(int i = 1; i < arr.length; i++){
//如果max的值比当前取出数组中值小,
// 就把当前取出数组中的值放到max中
if(max < arr[i]){
max = arr[i];
}
}
System.out.println("最大值是:"+max);
}
}