容器:将多个数据存储在一起,每个数据称为该容器的元素
数组:数组就是存储多个数据的容器,数组的长度固定,多个数据的数据类型要一致。
数组的3种定义方式
1.
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
int[] arr = new int[3];
2.
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
注意:给定了具体的元素就不能给定长度
int[] arr = new int[]{1,2,3,4,5};
3.
数据类型[] 数组名 = {元素1,元素2,元素3...};
int[] arr = {1,2,3,4,5};
数组的访问:
直接输出数组名,显示的是数组的地址 [I@75412c2f
索引: 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引
(index),可以通过数组的索引访问到数组中的元素。
通过索引访问数组中的元素:
数组名[索引],获取出数组中的元素
数组名[索引] = 数值,为数组中的元素赋值
数组的长度属性:
每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的
长度,语句为: 数组名.length ,属性length的执行结果是数组的长度,int类型结果。由次可以推断出,数
组的最大索引值为 数组名.length-1 。
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5};
//打印数组的属性,输出结果是5
System.out.println(arr.length);
}
数组原理内存:Java虚拟机的内存划分
JVM的内存划分:
区域名称
|
作用
|
寄存器
|
给CPU使用,和我们开发无关。
|
本地方法栈
|
JVM在使用操作系统功能的时候使用,和我们开发无关。
|
方法区
|
存储可以运行的class文件。
|
堆内存
|
存储对象或者数组,new来创建的,都存储在堆内存。
|
方法栈
|
方法运行时使用的内存,比如main方法运行,进入方法栈中执行。
|
数组常见的错误:
1.空指针异常
public static void main(String[] args) {
int[] arr = {1,2,3};
arr = null;
System.out.println(arr[0]);
}
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候
会抛出 NullPointerException 空指针异常。(就是原本存在的数组,被你删掉了,找不到数组了,就空指针异常)
2.数组下标越界
即是指你引用的数组下标不存在于该数组中
例如:
int[] i = new int[3];
int j = i[3];//引用了超过数组长度的位置
数组遍历
即是把数组中所有的数据查看一遍
经常使用的方法是:
//注意i<arr.length; 可以使用 i<=arr.length-1;
for(int i = 0;i<arr.length;i++){
操作数据数据;
}
获取数组最大值
int max = arr[0];
for(int i = 0;i<arr.length;i++){
if(arr[i]>max){
max = arr[i];
}
}
数组反转
int temp = 0;
for ( int start = 0 ,int end = arr.length-1; end<strat; start++,end-- ){
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
数组作为参数和返回值
//数组作为参数,很常见的有main函数
public static void printArray(int[] arr) {
System.out.println("2位置: " + arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/*
创建方法,返回值是数组类型
return返回数组的地址
*/
public static int[] getArray() {
int[] arr = { 1, 3, 5, 7, 9 };
//返回数组的地址,返回到调用者
return arr;
}