基本概念
什么是数组
数组是存放一组相同数据类型的集合
创建数组
//静态初始化
数据类型[ ] 数组名 = { 初始化数据 };
//动态初始化
数据类型[ ] 数组名 = new 数据类型 [ ] { 初始化数据};
例:
int[] array1 = {1,2,4};
int[] array2 = new int[]{1,2,3};//定义一个数组,并且初始化
注意:
[ ]中不可以写具体数字
数组的使用
获取数组长度&访问元素
int[] arr = {1,2,3};
//获取长度
System.out.println("数组的长度为:"+arr.length); //结果:3
//访问元素
System.out.println(arr[1]); //结果:2
arr[2] = 99;
System.out.println(arr[2]);//结果:99
注意:
数组下标从0开始
下标访问操作不能超出有效范围
[0,length-1]
否则会造成下标越界:
java.lang.ArrayIndexOutOfBoundsException异常
打印数组的三种方式
1.for循环打印数组
int[] arr ={1,4,5,3};
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
for(int x : arr) {
System.out.println(x+" ");
}
3.使用Arrays.toString()
System.out.println(Arrays.toString(arr));
注意:
1.
理解引用类型
数组也属于引用类型
代码示例:
public class test {
public static int[] func(int[] arr) {
arr[2]=24;
System.out.println("arr[2]="+arr[2]);
}
public static void main(String[] args) {
int[] array = {1,2,3,4};
func(array);
System.out.println("array[2]="+array[2]);
}
}
//执行结果
arr[2]=24;
array[2]=24;
1.在函数内部中修改数组中的元素,函数外部也发生了改变。
2.数组名存放在栈中,数组元素存放在堆中。
3.引用相当于c语言的指针,创建一个引用相当于创建了一个变量,这个变量里存放的是内存中的一个地址(堆中的一个内存空间的地址)。
3.传参实际上就是将地址传给了方法中的形参,所以在方法修改数组内容,也会改变主函数中的数组内容。
认识null
null在java中表示 “空引用”,也就是一个无效的引用
类似于c语言中的空指针,都表示一个无效的内存空间,因此不能对这个内存进行读写操作。否则会抛出 NullPointException
JVM内存划分
java虚拟机栈、本地方法栈、堆、方法区、程序计数器
java虚拟机栈(JVM Stack):平时所说的栈
本地方法栈(Native Method Stack):用来存储本地方法的变量(本地方法:底层是c/c++代码实现的方法,特征:被Native所修饰,特点:速度快)
堆 :JVM中最大的空间,存储对象,使用new创建的对象都是在堆上进行保存
方法区
程序计数器:存放下一条执行的指令的地址
堆是整个JVM共享一个,栈是每个线程具有一份