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关键字的作用!
数组的初始化:
大家都知道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关键字的作用!
相关文章推荐
- 【JAVA基础教程】-浅谈数组及其内存控制
- Java学习系列(三)Java运算符、控制语句、数组及其在内存中的运行分析
- java对象和内存的控制深入浅出
- Java 对象中变量属性的初始化时机与内存控制
- Java表达式、流控制、数组、字符串和类、对象、包、接口——Java学习笔记(三)
- Java进阶---数组与内存控制
- Java学习系列(三)Java运算符、控制语句、数组及其在内存中的运行分析
- (1)疯狂java:数据与内存的控制____数组初始化__1.1.1 java数组是静态的
- Java数组与内存控制(转)
- 【疯狂Java_突破程序员基本功的16课】charpt2 对象与内存控制
- (1)疯狂java:数据与内存的控制____数组初始化__1.1.2 数组一定要初始化吗
- Java数组与内存控制
- 浅谈Java String类、Java数组和Java对象
- 浅谈Java中数据在内存中的状态,以及String、StringBuffer、==、equals、数组等问题
- java 数组与内存控制
- 解析Java程序中对象内存的分配和控制的基本方法
- Java进阶---对象与内存控制(一)
- 浅谈Java内存区域与对象创建过程
- Java 对象及其内存控制
- 疯狂java之数组与内存控制