您的位置:首页 > 移动开发 > Objective-C

Java编舟录三 外篇ObjectReference 与 数组

2017-02-05 17:20 316 查看

Java编舟录三 外篇ObjectReference 与 数组

对象引用的作用

Reference: 可以看作一个路标,来指明具体对象在哪个位置,而不是实际的具体事物.专业说法:类似
于C语言中的指针效果.

Reference: 运行期间只能控制被程序员声明的指定类型对象,不能一会引用到狗,又引用到龙猫身上.

Reference: 可以引用为null...null也是一个值,但这个值不会被使用.

Reference: 当堆中的对象没有任何引用时,则会被定时被垃圾回收器回收.


primitive数据类型和引用

声明两个Dog的引用变量并创建两个Dog对象,将Dog对象赋值给引用变量.现在这2个Dog对象生活在堆上

Dog Black = new Dog();
Dog White = new Dog();  //引用数2 , 对象数2
此时的Black 与White2个引用变量 在内存的stack上,而创建出来的2个具体狗对象在内存heap.并由垃圾回收器管理

声明新的Dog引用变量,但不创建新的Dog对象而将变量White的值赋值给变量yellow,这表示:将White的字节组
复制了一份给引用变量yellow.

Dog yellow = White; //White 和 yellow 引用到一个对象,相同的字节组复制类似于一只具体的狗有了2
种叫法,小黄.小白.都是指那条具体的狗. 引用数3, 对象数2.

White = Black //表示Black中字节组赋值给了White,此时White指向了heap中的另一个具体狗对象
//狗1被 Black 和 White 引用,而狗2被 yellow引用


heap环境中的生与死

Dog Black = new Dog();
Dog White = new Dog();
声明两个Dog的引用变量并创建两个Dog对象,将Book对象赋值给引用变量.目前这2只new出来的Dog在heap
上发呆中..

White = Black;
变量Black的字节组赋值给变量White,两者引用变量都指向了同一个对象..
此时对象1被抛弃且能够被垃圾回集器处理...对象1已经没有任何引用,变成了无法存取的.

White = null;

将null赋值给White引用变量,代表着它不再引用任何事物,但是它还是能被用来指定其他Dog的引用变量.
对象2还被Black引用着,所以不被垃圾收回器标记:

有意义的引用数: 1
null引用数: 1
可存取的对象:1
被抛弃的对象: 1


数组如酒吧中的杯架

primitive数据类型:

1.声明一个int数组变量,数组变量是数据对象的引用.

int[] nums;

2.创建大小为10的数组,并将它赋值给之前声明为int[]的变量nums
nums = new int[5];

3.赋值int数组的每一个元素一个int值,在int数组的每个元素都是为int类型的变量

nums[0] = 11;
nums[1] = 21;
nums[2] = 13;
nums[3] = 15;

理解数组中的每个元素都是变量:
1. Java中如需有效率地排列元素时,数组作为最基本的容器可以使用位置索引来快速,随机地存取其中的元素.
2. 8种primitive数据变量中的一种,都可以作为元素存储在指定类型的数组中,要不就是引用类型,所以int
数组,每个元素都可装载一个int.但是注意:引用数据类型,如Dog[] 每个是装载的是实体对象的引用地址.
引用变量只会保存具体对象的引用,Dog数组中的元素也只能存储dog类型对象的引用地址.


数组引用类型:

1. 声明一个Dog数组变量
Dog[] pets;

2. 创建大小为7的Dog数组,并赋值给前面所声明的Dog[]类型变量pets
pets = new Dog[5];

3. 创建新的Dog对象并将它们赋值给数组的元素,Dog数组中只带有Dog的引用变量..还需要Dog的具体对象
pets[0] = new Dog();
pets[1] = new Dog();
pets[2] = new Dog();
pets[3] = new Dog();


最后一点: 数组是个对象,也就是引用数据类型.无论它被定义成primitive还是Reference数据类型,它就是一个对象,JAVA注重类型.数组被声明出来,就只能装入所声明类型的元素..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java