java数组及其内存管理

Java语言的数组变量是引用类型的变量,因此具有Java引用变量的特性。Java程序中的数组必须经过初始化才可以使用。不管哪种方式初始化Java数组,一旦初始化完成,该数组的长度就不可改变,Java语言允许通过数组的length属性来访问数组的长度。

数组的初始化有以下两个方式:

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

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

不要同时使用静态初始化和冬天初始化方式。也就是说,不要在进行数组的初始化时,及制定数组的长度,也为每个数组元素分配初始值。

数组元素的类型是基本类型中的字符类型(char),则数组元素的值是‘\u0000’。

数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false。

数组元素的类型是引用类型(类接口和数组),则数组元素的值是null。

Java数组是静态的,一旦数组初始化完成,数组元素的内存空间分配即将结束 ,程序只能改变数组元素的值,而无法改变数组的长度。

Java的的数组变量是一种引用类型的变量,数组变量并不是数组本身,它值是只想堆内存中的数组变量。因次,可以改变一个数组变量所引用的数组,这样可以造成数组长度而变得假象。

JavaScrip这种动态语言不同的是数组长度是可以动态改变的。

在使用Java数组之前先初始化数组,即在使用数组之前,必须先创建数组。

始终记住:Java的数组变量只是引用类型的变量,他并不是数组队形本身,只要让数组变量指向有效的数组对象,程序中即可使用该数组变量。

大部分时候,我们把数组变量是数组对象搞混了,数组变量只是一个引用变量,有点类似于c语言里的指针,而数组对象就是把保存在堆内存中的连续内存空间。对数组执行初始化,其实并不是对数组变量执行初始化,而是在堆内存中创建数组对象 ,也就为该数组对象分配一块连续的内存空间,而这块连续的内存空间的长度即是数组的长度。对于数组变量来说,它并不需要进行多维的初始化,只是让数组变量指向毅哥有效的数组对象,程序即可正常使用该数组变量。Java程序中的引用变量并不需要经过进行所谓的初始化操作,需要进行初始化的引用变量的对象。需要指出的是,Java的局部变量必须由程序员复制初始值,因此如果定义了局部变量的数字变量,程序必须对局部的数据变量进行赋值,及时将它赋值为null。

基本类型的初始化比较简单:程序直接先为数组分配内存空间,再讲数组元素的值存入对应内存里。

对于强类型语言来说Java来说,怎样的瓶子装怎样的水,指定类型的变量只能存储指定类型的值。

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

 对于很多Java程序员来说,最容易混淆的是:引用变量的变量何时只是栈内存中的变量本身,何时又变成引用实际的Java对象。其实规则很简单:引用变量本质上只是一个指针,只要程序通过引用变量访问属性,或者通过引用变量来调用方法,该引用百年来那个就会由它所引用的对象代替。

如果读者有过写编程经验,应该经常遇到空指针异常:当通过引用变量来访问实例属性,或者调用非静态方法的时候,如果该应用变量还未引用一个有效的对象,程序就会引发空指针异常。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值