1:数组的定义。
数组在内存中是若干个大小一致,类型一样,地址连续的存储空间 。
2:数组的格式。
- 数据类型[] 数组名=new 数据类型[长度]; → int[] arr=new int[];
- 数据类型[] 数组名=new 数据类型[]{元素1,元素2,....}; → int[] arr=new int[]{1,2,3,4,5......}
- 数据类型[] 数组名={元素1,元素2,....}; → int[] arr={1,2,3,4,5......}
/*创建一个(new)整型数组(int[ ]),且长度为[ ] ,然后将这个对象的地址给变量arr,arr的数据类型 int[]
[] 表示一维数组,一行。[][]表示二维数组,若干行 */
3:数组的基本概念。
- 数组的访问通过索引完成,即:"数组名称[索引]",但是需要注意的是,数组的索引从0开始,所以索引的范围就是0 ~ 数组长度-1,例如开辟了3个空间的数组,所以可以使用的索引是:0,1,2,如果此时访问的时候超过了数组的索引范围,会产生java.lang.ArrayIndexOutOfBoundsException 异常信息。
例:
class Hh{
public static void main(String[] args){
int[] arr=new int[3];
System.out.println(arr[3]);
}
}
- 在
Java
中提供有一种动态取得数组长度的方式:数组名.length;
例:
class Hh{
public static void main(String[] args){
int[] arr=new int[3]; //创建一个(new)的长度为3,变量为arr的int整型数组
System.out.println(arr[arr.length-1]);//输出arr[2]的值
}
}
- 数组属于引用数据类型,所以在数组使用之前一定要开辟空间(实例化),如果使用了没有开辟空间的数组,则一定会出现
NullPointerException
异常信息。
例:
class Hh{
public static void main(String[] args){
int[] arr=new int[3];
arr=null; //将空集赋值给数组arr
System.out.println(arr[arr.length-1]);
}
}
4:数组内存流程解析。
解析范例:
class Hh{
public static void main(String[] args){
int[] arr1=null; //创建一个空集的数组arr1
int[] arr2=new int[3]; //创建一个长度为3的数组arr2
int[] arr3={1,2,3}; //创建一个赋值1,2,3的数组arr3
System.out.print("输出数组arr2的值:"); //提示
for(int i=0;i<=arr2.length-1;i++){
System.out.print(arr2[i]+" "); //输出arr2集合的值
}
System.out.println(); //换行
System.out.print("输出数组arr3的值:");
for(int j=0;j<=arr3.length-1;j++){
System.out.print(arr3[j]+" "); //输出arr3集合的值
}
arr1=arr2; //将数组arr2赋给arr1
arr2[1]=6; //将常量6赋给arr2[1],意为证明arr1[1]改变
System.out.println();
System.out.println("输出arr1数组arr1[1]的值:"+arr1[1]);//输出arr1[1]的值
}
}
栈内存 arr1 | 堆内存 arr1 | 栈内存 arr2 | 堆内存 arr2 | 栈内存 arr3 | 堆内存 arr3 | 栈内存 arr1=arr2 | 堆内存 arr1=arr2 |
arr2[0] | 0 | arr3[0] | 1 | arr1[0] | 0 | ||
null | arr2[1] | 0 | arr3[1] | 2 | arr[1] | 6 | |
arr2[2] | 0 | arr3[2] | 3 | arr[2] | 0 |
5:Java中内存大致分布情况。
- 寄存器:存储CPU计算的一些临时数据。
- 本地方法区:存储操作系统执行的部分代码
- 方法区:存储应用软件执行的部分代码
- 又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
- 方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
- 栈内存:把类似指针的地址数据放在同一块内存区域这块区域遵守栈的存取规则我们就称之为栈。简单地说,栈内存存储所 运行函数的代码!
- 堆内存:把主要的数据放在同一块内存区域并遵守堆的存取规则。同理,堆内存是存储对象的!
- 基本数据类型->常量->常量池->方法区
- 引用数据类型->对象->堆内存