一. 栈和堆

-
栈:
当一个函数调用时,会在栈内存中申请一个空间,当函数中定义一个变量时,会分配到这个函数申请的栈空间中 ,函数运行结束时,函数的栈空间被收回,在这个函数中定义的变量也随之被收回 -
堆:
用new关键字产生的数组和对象都存放在堆内存中,由java的垃圾回收器来自动管理,堆中产生一个数组或对象, ,还可以在栈中定义一个"引用变量",取值等于堆中的数组或对象的首地址,以后就可以直接通过栈中的引用变量 ,直接调用在堆中的数组或对象,栈中的这个变量就是堆中对象或数组的别称,或者是代号 -
区别
栈区(stack):编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。
堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表。 -
好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。14、内存结构:
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
方法区:静态成员、构造函数、常量池、线程池
本地方法区:window系统占用
二 . 数组 (有数组工具类 Arrays)
//静态数组
int[] arr1 = {1,2,3};
int[] arr2 = new int[]{1,2,3};
//动态数组
int[] arr3 = new int[3];
arr3[0] = 1;
arr3[1] = 2;
arr3[2] = 3 ;
//数组排序
Arrays.sort(arr3);
//数组拷贝
int[] ints = Arrays.copyOf(arr3, 1);
int[] ints1 = Arrays.copyOfRange(arr3, 0, 2);
for (int i = 0; i < ints1.length; i++) {
System.out.println(ints1[i]+" ");
}
//异常:
//空指针异常:
int[] arr = null;
arr[0] = 2;
//下标越界异常
int[] arr4 = new int[]{1,2,3,4,5};
int num = arr4[5];
//将无用对象回收
System.gc();
三. 多维数组

网友评论