考试告一段落。。。虽然还有一门计组。。。
但是复习不下去了。。。
基础部分:简单知识点堆积
知识地位:难度不大,但是很多人对java数组的内存分配把握并不准确
当数组的所有元素都被分配了合适的内存空间,并制定了初始值时,数组初始化完成,程序以后将不能重新改变数组对象在内存中的位置和大小。
1.1 数组初始化:
- java 数组是静态的,即当数组呗初始化后,该数组所占的内存空间、数组长度都是不可变的。
- java 中的数组必须经过初始化才可使用
数组初始化的两种方式:
静态初始化:初始化时由程序员显示制定每个数组元素的初始值,由系统决定数组长度
String[] animal = new String[]{ "小白兔","胡二狗"
}
动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。
String names = new String[6];
默认初始化:
- 数组元素是基本类型中的整数类型(byte,short,int和long),则数组元素的值为0,
- 浮点类型(float,double),则数组元素的值时0.0
- 字符类型(char),则数组元素的值为’\u0000’
- 布尔类型(boolean),则数组元素的值为false
- 引用类型(类,接口和数组)则数组的元素值为null
可变数组?
数组变量是一种引用类型的变量,数组变量并不是数组本身,它只是指向堆内存中的数组对象。因此,可以改变一个数组变量所引用的数组,这样可以造成数组长度可变的假象。——但是原来哪个堆内存中的数组对象本身是不变的。只是指向变了——由此体现了java是静态语言。
图一:
数组一定要初始化吗?
- java的数组变量只是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中即可使用该数组变量。
- 数组变量只是一个引用变量(类似于C语言里的指针),而数组对象就是保存在堆内存中的连续内存空间。对数组执行初始化,其实并不是对数组变量执行初始化,而是在堆内存中创建数组对象——也就是为该数组对象分配一块连续的内存空间,这块连续的内存空间的长度就是数组的长度。
图二:
所有局部变量都是放在栈内存里保存的,不管其是基本类型的变量,还是引用类型的变量,都是存储在各自的方法栈内存中的;但引用类型的变量所引用的对象(包括数组、普通java对象)则总是存储在堆内存中。
注意:
java 语言,对内存中的对象通常不允许直接访问, 为了访问堆内存中的对象,而为了访问堆内存中的对象,通常只能通过引用变量。.
本质:>
引用变量本质上只是一个指针,只要程序通过引用变量访问属性,或者通过引用变量来调用方法,该引用变量就会由它所引用的对象代替。