本帖最后由 赵方明 于 2012-7-6 23:50 编辑
这个问题好多人问。。。。先给你看看我做的笔记的内存部分,然后结合代码讲一讲。
9,内存的结构是什么样的?
内存分为5个部分,栈内存,堆内存,方法区,本地方法区,寄存器。
10,栈内存的作用和特点时什么?
栈内存存储局部变量,当数据使用完,所占空间会自动释放。
11,什么是局部变量?什么是成员变量?
定义在方法或者说函数里的变量,方法的参数里的变量,定义在for循环里的变量是局部变量。
定义在类里的变量是局部变量,定义在类里的函数叫做成员函数。
12,堆内存作用是什么?特点是什么?
通过new关键字建立的实体都存放在堆内存中,实体包括数组和对象。
特点:每一个实体都有内存地址值。
实体中的变量都有默认初始化值。
实体不再被使用,会在不确定的时间内被垃圾回收器回收。
Int [] x=new int[3];//这是一个赋值动作,赋的值不是数组,而是数组在内存中的地址。
New在堆内存中开了一个空间存放数组。X中存放的是这个空间的地址值。
13,数组中元素有没有默认值?
有,实体中的变量都有默认初始化值。
Int型默认初始化值是0.
Boolean类型默认初始化值是false。
14,如何让12中的x不再指向右面的数组?
用 x=null; 此时x中存储的将不是右面数组的地址值,而是为空。此时x就不再指向右面的数组。
15,堆内存中的垃圾是怎么回事?
一个堆内存中的实体,当栈内存中没有任何引用指向它时,则视它为垃圾。这个垃圾不会立刻被内存清除掉。而是在一个不确定的时间内由垃圾回收器回收。
首先要知道,栈中存储的是局部变量,包括定义在方法中的变量,定义在方法形参列表的变量,和for循环里的变量。
而堆内存中存储的是实体,包括对象和数组。
class Memory
{
public static void main(String[] args)
{
int a=5;//a是定义在主函数里的变量,所以存储在栈内存中。执行这一句时,在栈内存中开辟一片内存空间,空间名是a,存储int类型变量。并初始化为5.这里不涉及堆内存。
int [] arr=new arr[] {2,3,5,3,5};//这里,先说在左边。左边实际上定义的是一个变量,变量类型是int [],变量名是arr。所以在栈内存中开辟一片内存空间,空间名是arr,类型是int [].再看new arr[] {2,3,5,3,5},new关键字在堆内存中开辟一片内存空间,这片内存空间是一个数组,存储数组元素。并初始化。堆内存中每个空间都有地址值。new arr[] {2,3,5,3,5}的地址值就赋给了arr。
}
}
|