**
我的JAVA学习之路
**
本博客为记录自己学习过程的博客,参考资料为2019博学谷JAVA精讲(注:截图均来自博学谷JAVA精讲)
第八篇:在第七篇里介绍了函数及数组,那么在第八篇里介绍一下java程序的内存分配,然后在下一篇里介绍面向对象编程的封装,继承,多态。
JAVA程序的内存分配:
- 方法区:存储可运行的class文件,包含方法,静态成员,常量等(面向对象部分详解)
- 栈:方法运行时使用的内存,特点是“后进先出”,即最先进入栈区的方法最后出栈,比如main方法
- 堆:存储new出来的数组或对象
- 本地方法栈:JVM在调用操作系统功能时使用,与开发无关
- 寄存器:CPU使用,与开发无关
数组类型:
int arr[] = new int[5];
变量arr存储的是数组在堆内存中的地址值,而不是数组元素的值,变量arr通过内存地址引用堆内存中的数组,所以数组是引用类型
接下来是数组的初始化过程:
1.动态初始化
public static void main(String[] args){
int[] arr = new int[5];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
for (int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
2.静态初始化
public static void main(String[] args){
int[] arr = {1,2,3,4,5};
arr[0] = 6;
arr[1] = 7;
arr[2] = 8;
arr[3] = 9;
arr[4] = 10;
for (int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
数组使用中两个常见问题:
1.数组索引越界异常: ArrayIndexOutOfBoundsException
public static void main(String[] args){
int[] arr = new int[5];
arr[0] = 6;
arr[1] = 7;
arr[2] = 8;
arr[3] = 9;
arr[4] = 10;
System.out.println(arr[0]);//6
System.out.println(arr[1]);//7
System.out.println(arr[2]);//8
System.out.println(arr[3]);//9
System.out.println(arr[4]);//10
System.out.println(arr[5]);//错误
}
2.空指针异常:NullPointerException
数组引用存储的值为null而非数组的地址值时
public static void main(String[] args){
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
System.out.println(arr[0]);//1
System.out.println(arr[1]);//2
arr = null;
System.out.println(arr[2]);//错误
}