您的位置:首页 > 职场人生

黑马程序员-数组

2013-11-11 23:46 204 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

数组的特点

(1) 只能存储同一类型数据

(2) 一旦初始化长度固定

(3) 数组的每个元素会有对应初始值

数组是一种单独的数据类型。数据类型分为2大派,分为基本数据类型和引用数据类型。 第二大派是引用数据类型。那么大家现在已经接触到了引用数据类型三种当中的一种。就是数组类型[] 中括号就代表数组。

总结:数组是属于引用数据类型

数组的初始化方式:

静态初始化:元素类型[]
数组名 = new 元素类型[元素个数或数组长度];

示例:int[] arr = new int[5];

动态初始化:元素类型[]
数组名 = new 元素类型[]{元素,元素,……};

示例:int[] arr = new int[]{3,5,1,7};

int[] arr = {3,5,1,7};

执行以下代码,内存中发生了什么事

int[] arr = new int[3]

int[] arr2 = arr;

arr2[0] = 10;

内存分析图:



栈内存的特点

(1) 存储的都是局部变量,栈内存也成为方法栈,因为方法运行的时候会在栈内存中开辟属于自己的空间

堆内存的特点

(1) 存储的都是对象数据,凡事以new关键字创建的对象,都会存储在堆内存中,

(2) 在堆内存中分的对象的属性,都有默认的初始值

(3) 数组的默认初始化值根据数组的类型而定;

(4) int类型默认为0,double类型默认为0.0,float类型默认为0.0f,

例:

Int :0

Char: ’’(空字符)

Double:0.0

Float:0.0f

String:null

局部变量:

定义在方法中的变量;

定义在方法的参数上的变量;

定义在for循环里边的变量;定义在while()里的变量

局部变量和成员变量的区别和使用原则

(1)成员变量和局部变量可不可以发生重名

原因:可以,成员变量存在堆内存,而局部变量存在于栈内存,两者有所区别,方法的访问会采取默认的就近原则

(2)成员变量有初始值

局部变量在使用之前必须要有初始化,否则编译会报错

理解:如果没有初始化局部变量,但是在后续的代码中,没有编写该局部变量的使用语句,那么编译可以通过,但是代码中如果涉及使用到该局部变量,那么如果没有初始化,编译报错

for(...)循环和while()循环的一个需要注意的地方

在for ()循环中为了循环而定义用的变量,即是指for(int x=0;x<10;x++)中的x而不包括循环体的里面定义变量,在执行完循环体后马上就被内存中释放了,在循环体外不能再用,这部分变量叫局部变量,存储于栈内存中,while()循环中定义的变量也是如此

int[] X = newint[3];这个语句在内存中的分析

java中,定义一个变量,每个变量会有一个变量名,上面的X就是一个刚定义的一个变量名

在栈内存中开辟一个空间存放变量名X

通过new这个关键字,在堆内存当中开辟一个空间,这个空间具有一个内存地址

通过“=”赋给X,从而让X指向这个内存空间。

所以举个简单的例子,就比如x是一个人,定义X的时候即给他一个站的位置,new
是一个动作,可以说是在空地上建造了一座房子,也就创造了一个空间,“=”是另一个人,他把这个房子的地址告诉了X,那么下次X就能找到这个新建的房子的位置,并不是说把这个新建的房子搬到X所站的位置。当然如果又定义了一个Y,那么也可以把这个新建的房子的地址告诉Y,那么Y也可以使用这房子,但是是和X共同使用同一个空间,无任何差别的。

int[] X = newint[3];

int[] Y = X;

X[1]=3;

System.out.println(X[1]);//输出为3

Y[1]=4

System.out.println(X[1]);//输出为4

int a=5;

int b=a;//把a的值复制一份给b

b=6;

System.out.println(b);//输出是6

System.out.println(a);//输出是5

在堆内存中的内容,如果没有任何栈内存的引用,那么则会被认为是垃圾,java会启动垃圾回收机制,不定时回收

int[] X = newint[3];

int[] Y = X;

X[1]=3;

System.out.println(X[1]);//输出为3

Y[1]=4;

System.out.println(X[1]);//输出为4

X=null;//此时空间被垃圾回收机制不定时释放

而栈内存中,用完的变量,立刻就会被释放出内存

PS:以下是在论坛上看到的总结

栈内存:数据使用完毕后,会自动释放;凡是局部变量都在栈内存里

堆内存:new出来的东西都不在栈内存里边,而是在堆内存中;

new出来的实体:数组,对象;

----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: