1、数组的定义
格式一:
数组中保存的数据类 型[] 数组的名 = new 数组中保存的数据类型[ 开辟的连续空间个数 ];
把上述定义的格式可以翻译成下述格式:
数据类型[] 数组名 = new 数据类型[长度] ;
//定义变量:
数据类型 变量名 = 值;
int a = 123;
//定义数组:
int[] arr = new int[4]; 在内存中一次开辟4个连续的空间,每个空间都是int类型,并且这些空间中保存的数据也必须是int类型。
格式二:
格式:在定义数组的时候,如果已经知道数组中的具体数据,这时可以在定义数组的时候直接书写具体的数据。
数据类型[] 数组名 = {值,值,值.......};
举例:int[] arr={11,22,33,44,-1,0};
2、Java的内存分配
当我们在dos窗口输入了java class文件名 回车之后,启动JVM。
JVM把内存划分成5片区域:
栈内存:栈内存主要是用来运行函数的,在函数中定义的所有变量,都会在这个内存开辟空间。
在栈内存中定义的变量,不初始化,是不能直接使用的。
注意:所有的函数都必须在栈内存中运行。
而jvm只会运行处于栈内存顶部的函数。
函数被加载到栈内存的动作,称为函数的压栈(入栈)。
函数执行完之后就会从栈中消失(函数的弹栈,或者叫做出栈)
堆内存:在程序中使用new 关键字创建出来的所有东西,都会保存在堆内存中。
堆内存中开辟的空间,不赋值,都会有默认的初始化数据。
整数:默认是0
小数 默认0.0.
boolean 默认是false
char 默认是 ‘\u0000’ 在内存中表示空字符
方法区:JVM在加载class文件的时候,所有的class文件就要加载在这个内存中。(先了解,后面会详细讲解)
本地方法区:主要是保存native关键字标注的方法
寄存器:是给CPU使用的。
3、数组的内存分配
数组的简单操作:
我们需要通过数组的总名称 引用变量空间,然后通过这个引用空间中的地址,再去找到堆内存中的连续的空间,然后才能准确的去操作数组。
获得数组中每个空间中的值:
数组名[下标];
给数组的每个空间赋值:
数组名[ 下标 ] = 值;
我们定义的数组名空间:
它是一个特殊的内存空间,它中只能保存某个数字在堆中的内存地址。而不能像前面学习普通变量一样来保存普通的常量。
数组名空间保存某个数组的地址,而数组的每个真实空间保存具体的普通常量数据。
4、数组的常见问题
1)、数组角标越界异常
ArrayIndexOutOfBoundsException:
当我们在操作数组的时候,指定的数组的下标,超越的数组空间的真实下标之后,就会发生这个问题。
在操作数组的时候,一定要保证下标在0~长度-1之间。
2)、空指针异常
说明:在JAVA中null常量,不能赋值给基本类型变量空间,可以赋值给引用类型变量空间。
NullPointerException:空指针异常。
在当前的程序中使用一个引用变量,但是这个引用变量并没有指向一个真实的内存空间,而导致这个问题。
当程序中发生上述这个异常的时候,这时应该去看当前这行代码中哪里使用的引用变量,肯定是这个引用变量不指向具体的某个堆中的内存地址,导致null的发生。
图解说明:
注意:在Java中当被new出来的堆中的内存,没有任何一个引用指向它的时候,这时它就是一个垃圾,JVM就使用垃圾回收器把当前这片内存清理。
5、遍历数组
需求:将数组中每一个数据打印到屏幕上。