今天我们来看下有关于数组的内容
首先我们需要知道什么是数组,数组就是相同数据类型的元素集合, 那么在Java中,我们都怎么表示呢
int[] array;//这就是简单的数组定义.int [] 表示为整形数组, array表示为变量
在java中,有两种的存储方式,一种是静态存储,一种是动态存储,如何表示,我们往下看,
第一种
int [] array={1,2,3,4}
int[] array=new int[]{1,2,3,4}
//以上两种都表示为静态存储,不过我们经常使用的还是第一个.
int [] array=new int[10];
//这种就是动态存储,一开始并不立马赋值,此时数组元素均默认为0
那么当我们想遍历数组时,都有哪些方式呢?
//1.最容易理解的是利用for循环
int [] array={1,2,3,4};
for(int i=0;i<array.length;i++){
System.out.println(array[i];
}// 这种方式简单易懂
//2.for-each
for(int x: array){
System.out.println(x);
}//写起来非常快捷
//3.通过Arrays类中的方法
System.out.Println(Arrays.toString(array));//把参数的数组转化成字符串进行输出
那么到这个地方,我们就需要知道以下三个技能了
1.怎么定义数组
2.怎么使用数组
3.如何打印数组
大家还需要好好把握体会~
OK,接下来我们就来探究下数组底层的东西,首先我们来看张图
我们目前所需要掌握的就是Java虚拟机栈和对,这两个部分,剩余的我们之后再详细介绍
1.Java虚拟机栈
一般用来存放局部变量
public static void method(){
int a=5;//此时a就存放在Java虚拟机栈中
}
2.堆
只要是对象都在堆上分配内存.
3.程序计数器
空间很小,主要是存放下一条指令
4.方法区
存放静态的成员变量
5.Java本地方法栈
运行一些由c/c++代码编写的程序[JVM其实是一个由c/c++代码编写的软件]
各区域使用情况如下所示
划分内存的好处是:方便管理
我们再接着看引用这个知识点
int [] array={1,2,3,4,5};我们形象的用图来表示下
我们看到array 这个引用,引用(指向)了一个数组对象.再接着看
int [] array={1,2,3,4};
int [] array2=array;//这个array2引用,指向了array所指向的对象,
//如下图所示
我们说,当堆里的对象没有人使用时,JVM垃圾回收器就是自动回收.那我们我们还有几个误区需要说明一下
误区一:
引用能指向引用吗?
答案是错,引用只能是指向对象,
array1=array2;//代表arr1 这个引用 引用了arr2所引用的对象
误区二:
一个引用能指向多个对象吗?
答:不能,一个引用只能同时指向1个对象。
误区三:
引用一定在栈上吗?
答:不一定,我们目前只接触到了局部变量,还没有接触到成员变量。
误区四:
引用赋值NULL代表啥?
代表整个引用不指向任何对象
接下来,我们在说下数据的拷贝有哪几种?
1.首先是我们自己实现数据拷贝
public static int [](int [] array){
int [] copy=new int[array.length];
for(int i=0;i<array.length;i++){
copy[i]=array[i];
}
return copy;
}
2.借助Arrays类中的方法(这个最为常用的)
int [] copy=Arrays.copyOf(array,array.length);
3.System.arraycopy(array,0,copy,0,array.length);各项参数如下
第一个参数是原数组参数,第二个参数是原数组下标;第三个参数是目的数组参数,第四个参数是目的数组下标;第五个参数是长度
4.int [] copy =array.clone();
在这里我们可以很清楚的可以看到我们对象产生了1个副本,然后将这个副本给了copy 这个引用,所以copy和array的地址不一样。
好了,我们的数组就写到这里,后期在进行详细的补充,坚持很难,但也很😎~ see you