JAVA程序员基本功之数组与内存控制
2015-11-26 19:45
316 查看
最近准备重过一遍JAVA基础,翻了翻李刚老师的《突破java程序员的16课》,借此机会和启发总结一下JAVA中的容易忽视的知识点。
数组初始化
JAVA是典型的静态语言,因此Java数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java数组使用之前必须先对数组对象进行初始化,所谓初始化,就是为数组的所有元素分配内存空间,并为每个数组元素指定初始值。
JAVA的数组变量是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中即可使用该数组变量。(注意数组变量、数组对象、数组元素的区别)
数组变量只是一个引用变量(有点类似于C语言的指针),通常存放在栈内存中(也可被放入堆内存中的);而数组对象就是保存在堆内存中的连续内存空间。对数组执行初始化,其实并不是对数组变量执行初始化,而是对数组对象执行初始化——也就是为该数组对象分配一块连续的内存空间,这块内存空间的长度就是数组的长度。
结果:
内存控制
下图是数组引用变量和数组对象在内存中的示意图:
所有局部变量都是存放在栈内存里保存的,不管其是基本类型的变量,还是引用类型的变量,都是存储在各自的方法栈区中;但引用类型变量所引用的对象(数组、普通Java对象)则总是存储在堆内存中。
使用数组
当数组引用变量指向一个有效的数组对象之后,程序就可以通过该数组引用变量来访问数组对象。Java语言不允许直接访问堆内存中的数据,因此无法直接访问堆内存中的数组对象,程序将通过数组引用变量来访问数组。
多维数组的本质依然是一维数组。JAVA程序使用数组时应从内存控制的角度来把控程序,不仅仅停留在代码表面。
数组初始化
JAVA是典型的静态语言,因此Java数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java数组使用之前必须先对数组对象进行初始化,所谓初始化,就是为数组的所有元素分配内存空间,并为每个数组元素指定初始值。
JAVA的数组变量是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中即可使用该数组变量。(注意数组变量、数组对象、数组元素的区别)
数组变量只是一个引用变量(有点类似于C语言的指针),通常存放在栈内存中(也可被放入堆内存中的);而数组对象就是保存在堆内存中的连续内存空间。对数组执行初始化,其实并不是对数组变量执行初始化,而是对数组对象执行初始化——也就是为该数组对象分配一块连续的内存空间,这块内存空间的长度就是数组的长度。
public class ArrayTest { public static void main(String[] args) { //采用静态初始化方式初始化第1个数组 String[] books = new String[]{ "疯狂java讲义", "轻量级Java EE企业级应用实战", "疯狂Ajax讲义", "疯狂XML讲义" } ; //采用静态初始化的简化方式初始化第2个数组 String[] names = { "孙悟空", "猪八戒", "白骨精" }; //采用动态初始化方式初始化第3个数组 String[] strArr = new String[5]; //测试 System.out.println("第一个数组长度为:"+books.length); System.out.println("第二个数组长度为:"+names.length); System.out.println("第三个数组长度为:"+strArr.length); //让books数组变量,strArr数组变量指向names所引用的数组 books = names; strArr = names; System.out.println("------------------"); System.out.println("books数组长度为:"+books.length); System.out.println("strArr数组长度为:"+strArr.length); //改变books数组变量所引用的数组的第二个元素值 books[1] = "唐僧"; System.out.println("names数组的第二个元素为:"+books[1]); } }
结果:
第一个数组长度为:4 第二个数组长度为:3 第三个数组长度为:5 ------------------ books数组长度为:3 strArr数组长度为:3 names数组的第二个元素为:唐僧
内存控制
下图是数组引用变量和数组对象在内存中的示意图:
所有局部变量都是存放在栈内存里保存的,不管其是基本类型的变量,还是引用类型的变量,都是存储在各自的方法栈区中;但引用类型变量所引用的对象(数组、普通Java对象)则总是存储在堆内存中。
使用数组
当数组引用变量指向一个有效的数组对象之后,程序就可以通过该数组引用变量来访问数组对象。Java语言不允许直接访问堆内存中的数据,因此无法直接访问堆内存中的数组对象,程序将通过数组引用变量来访问数组。
多维数组的本质依然是一维数组。JAVA程序使用数组时应从内存控制的角度来把控程序,不仅仅停留在代码表面。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统