现在的位置: 首页 > 综合 > 正文

【Java基础】——数组

2013年09月06日 ⁄ 综合 ⁄ 共 1535字 ⁄ 字号 评论关闭

当当买的新书今天到了,叫《疯狂Java突破程序员基本功的16课》。我记得罗永浩好像说过什么打着几天速成/疯狂/轻松之类旗号的都不靠谱,其实我也是抱着不靠谱的心态买的这书。但是今天到手后看来……还是那个事,比较适合我这种基本功薄弱的菜鸟。虽说我做了快3年的Java,但是说实话我根本就没有学过Java,现在用的所有开发技巧都是早年学C语言时学的(现在C语言压根就不会了。。。)。所以这本书比较补内功心法,推荐跟我一样Java入门的菜鸟看看。

Java的数组跟对象类似,属于引用类型的变量。

Java语言是典型的静态语言,因此Java的数组是静态的,即当数组被初始化后该数组的长度不可改变。

初始化数组的方式有两种:静态初始化/动态初始化。

静态初始化:

String[] books = new String[]{
    "a",
    "b"
}

String[] names = {
    "c",
    "d"
}

动态初始化:

String[] strArr = new String[5];

OK,Java数组就讲到这里,下面讲讲数组的内存分配。

再讲内存分配之前先介绍四个关键字:

栈内存、堆内存、变量、对象

这里最关键的就是变量与对象的区别,我们看一个例子:People p =
new People()
;这里红色的就是变量,而蓝色的就是对象

下面我们来分析一下基本类型数组的初始化过程:

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

1.在main栈内存申请iArr空间;

2.在堆内存中申请int型2和5的连续空间;

3.将连续空间的地址值赋给栈内存中的iArr。


下面我们再来分析一下引用类型数组的初始化过程:

Person[] students;
students = new Person[2];
Person p1 = new Person();
Person P2 = new Person();
students[0] = p1;
students[1] = p2;

1.在main栈内存申请students空间;

2.在堆内存中申请2个连续空间;

3.在main栈内存中申请p1空间;

4.在堆内存中申请p1对象空间,并把地址值给栈内存中的p1;

5.在main栈内存中申请p2空间;

6.在堆内存中申请p2对象空间,并把地址值给栈内存中的p2;

7.将p1对象的地址值给堆内存中的students[0];

8.将p2对象的地址值给堆内存中的students[1]。


===============================================================================================

有些书籍这样描述:

基本类型变量的值存储在栈内存中。(这句话是错误的,例子中基本数据类型的值2、5都是存放在堆内存里的)

正确的描述应为:

所有局部变量都是放在栈内存里保存的,不管其是基本数据类型变量还是引用类型的变量,都是存储在各自的方法栈区域中;但引用类型变量所引用的对象(包括数组、普通Java对象)则总是存储在堆内存中。

请看下面这个例子:

int k = 5;//k在栈内存中,存储的值是5,也就说5在栈内存中

People p = new People();//p在栈内存中,存储的值是new People()的地址值,new People()在堆内存中

int[] s = {5};//s在栈内存中,存储的值是{5}的地址值,{5}在堆内存中,也就说5在堆内存中。

这里还引出了一个概念就是:

数组元素就是变量

int[] iArr = new int[5];

int n;

n与iArr[x]都是变量。

本节的重点:

1.Java数组的基本语法;

2.数组的静态特性;

3.数组的内存分配机制;

4.初始化Java数组的两种方式;

5.数组引用变量和数组对象;

6.数组元素等同于变量。

抱歉!评论已关闭.