Chapter 1 : 数组与内存控制

前段时间去图书馆借了本书《疯狂Java》,觉得写的特别好,把需要注意的地方记一下。

第一章 讲的是数组

1、数组的初始化

数组的初始化主要有两种方式{静态初始化,动态初始化}

其中,静态的初始化长的这个样子

String[] data={"1111","2222","3333"}

而动态初始化则是

String[] star=new String[5];

这个是都知道,不过之前没有那么细细的去考虑过,Java的静态初始化的数组是没有办法去改变其长度的,比如上面 data数组,其长度固定为3,不会变化。
同时,在使用的时候,也要注意到,对于Java中的数组,不能同时使用静态初始化和动态初始化,也就是说,不能说用

String[] tmp=new String[5]{"111","222"}

这样使用是不允许的,

2、数组为什么要初始化?

这一个小节,作者讲了这样一个问题,数组初始化的原因?到底做了什么事情?
我想这样来理解,Java的数组是引用型的变量,所谓引用型的变量,我们用

String[] data={"1111","2222","3333"}

来举例,其中的data变量是一个引用型的变量,其存储区域为 程序的堆栈中,如果没有初始化,那么对于整个数组而言,就只有data一个引用变量,没有指向有效的数据地址,当然没办法使用这个数组。因此从这个角度来理解,其初始化就相当于我们在C/C++的指针中,给指针变量指向有效地址的过程,而上面语句中静态初始化的{“1111″,”2222″,”3333”}则是直接在堆内存中分配相应的内存单元,并且将数据保存进去,并且将data指向该内存单元。

3、数组初始化原理的分析:

正如第一小部分所说,数组初始化分为静态和动态两种。书中举了这样一个例子。

int[] iArr;
iArr=new int[]{1,2,3,4,5}

第一行中的int[] iArr是定义了一个iArr的数组变量,该变量为引用类型,没有指定有效的内存,因此暂时是无法使用的。

而第二行则静态初始化,在堆内存中分配相应的存储单元,并存入输入,然后将iArr指向该堆内存地址。

作者有这样一个总结:

所有的局部变量都是放在栈内存中保存的,不管是基本类型的变量,还是引用类型的变量。

而引用类型变量所引用的对象,是一直在堆内存中的。

对Java来将,堆内存中的地址不能直接访问,因而必须通过引用对象来访问。

4、关于Java的多维数组

在实际中,Java的多维数组实现的机制就是Java数组。

如int[][] A;其就是元素为int[]的数组。

About: happyhls


发表评论

电子邮件地址不会被公开。 必填项已用*标注