您的位置:首页 > 编程语言 > Java开发

java:浅谈数组与对象的内存控制

2014-04-24 19:20 295 查看
数组与内存控制:

数组的初始化:

大家都知道java中的数组是静态的,必须经过初始化才可以使用,经过初始化之后,数组的长度便是不可以修改。

所谓初始化,就是为数组对象的每个元素分配内存空间,并指定相应的初始值。数组的初始化有两种方式。

静态初始化:由程序员显示指定每个数组元素的初始值,由系统决定数组的长度。

例子:

String[] book1 = new String[]

{

"疯狂java讲义",

"疯狂ajax讲义",

"疯狂XML讲义"

   };

动态初始化:  由程序员显示指定数组的长度,由系统为数组元素分配初始值。

String[]  book2 = new String[4];

由java的内存分配机制我们知道:

所有的局部变量都是存储在栈中的,不管是基本类型变量还是引用型的变量,只是引用类型的变量引用的对象放在堆中。所以,上面两个数组变量其在内存的分配如下:

        


  

在初始化数组之后,不管你是用什么方式初始化的,数组的长度就被确定下来了。

然而,我们可以通过:

Book2 = Book1;

System.out.println( book2.length );

却看到book2的长度变成了3.  这只是一种假象,这只是因为book2所引用的对象变成了book1引用的对象了,然而book2之前引用的数组对象的长度并没有改变。

那么数组变量一定要初始化么?

答案是否定的,

String[] book3;

Book3 = book2;

上面的book3 数组变量就没有初始化,而是通过一个数组变量赋值,来使book3指向内存中的一个数组对象。

其实,数组的初始化,并非是初始化数组变量,而是初始化数组变量所指向的数组对象。

对象与内存分配:

实例变量和类变量:

学习java的都知道用static修饰的成员变量就是类变量,否则就是实例变量,那我们来讨论一下其的内存分配吧!

在jvm中一个类就对应一个class对象,因此一个类的一个类变量只需要一个内存空间;但对于实例变量,该类每创建一个对象就要为实例变量分配一块内存空间,换句话说,我们创建了多个对象就要为其实例变量分配多少空间。

下次我们将讲述类变量和实例变量的初始化,类继承的内存分配,还有final关键字的作用!

             
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: