Java核心技术 卷1 学习笔记
2014-04-25 16:42
232 查看
1. C++中有指针和引用的概念,而Java中所谓的对象引用等价于C++中的指针。
2. 参数调用方面,Java对基本类型是传值调用,对对象类型是传址(指针)调用,传址调用过程中要复制指针。因此,Java对于voidswap(obj x, obj
y)这种函数内部其实只交换了经过复制后的指针的指向,出函数后,原来的对象引用(指针)仍然没有被交换,因此Java无法解决这个问题。在C++中则可以通过传引用(&)来轻松解决。
3. C++和Java对待多态性和动态绑定的态度不一样,甚至可以说是相反。C++对待多态和动态绑定的态度是谨慎的,这从声明一个虚函数(virtual关键字)可以看出,C++中的成员函数并不是默认就可以被Override。而Java中所有类的方法都是可以Override的,只是在你不想该方法被Override时需要使用final关键字。
4. Java在类中的对象成员的get函数返回时候需要注意,它实际返回了一个指向该成员的指针,如果这个成员恰好是一个可变对象的话,那么请注意下面的代码:
执行以上代码你会发现,我们并没有调用setBirthday方法,但是usr的birthday却改变了。因此我们应该使用注释掉的那行return代码,clone一个新的对象返回,这样改变d的内容,就不会影响到类成员。
5. Java中的String是不可变对象,Integer、Double、Long等也是不可变对象,即是指对象在复制时会重新创建一个新对象,并赋给相应变量。因此4中提到的问题,在返回String之类的对象时是不会发生的。
2. 参数调用方面,Java对基本类型是传值调用,对对象类型是传址(指针)调用,传址调用过程中要复制指针。因此,Java对于voidswap(obj x, obj
y)这种函数内部其实只交换了经过复制后的指针的指向,出函数后,原来的对象引用(指针)仍然没有被交换,因此Java无法解决这个问题。在C++中则可以通过传引用(&)来轻松解决。
3. C++和Java对待多态性和动态绑定的态度不一样,甚至可以说是相反。C++对待多态和动态绑定的态度是谨慎的,这从声明一个虚函数(virtual关键字)可以看出,C++中的成员函数并不是默认就可以被Override。而Java中所有类的方法都是可以Override的,只是在你不想该方法被Override时需要使用final关键字。
4. Java在类中的对象成员的get函数返回时候需要注意,它实际返回了一个指向该成员的指针,如果这个成员恰好是一个可变对象的话,那么请注意下面的代码:
Class User{ private Date birthday = new Date(); … public Date getBirthday(){ return birthday; //return (Date) date.clone(); } public void setBirthday(Date d) { birthday = d; } … } User usr = new User(); Date d = usr.getBirthday(); d.setTime(d.getTime() + (long) 3600 * 1000); System.out.println(usr.getBirthday());
执行以上代码你会发现,我们并没有调用setBirthday方法,但是usr的birthday却改变了。因此我们应该使用注释掉的那行return代码,clone一个新的对象返回,这样改变d的内容,就不会影响到类成员。
5. Java中的String是不可变对象,Integer、Double、Long等也是不可变对象,即是指对象在复制时会重新创建一个新对象,并赋给相应变量。因此4中提到的问题,在返回String之类的对象时是不会发生的。
相关文章推荐
- Java2核心技术学习笔记 分类: java 2009-11-29 23:54 339人阅读 评论(0) 收藏
- 【学习笔记】java核心技术学习笔记整理
- Java2核心技术第七版的学习笔记(三) Fundamental Programming Structures in Java(Java语言的基础)(一)
- Java核心技术(第8版)学习笔记_多线程
- Java核心技术(第8版)学习笔记_接口与内部类
- java核心技术学习笔记1---基本概念
- java学习笔记03——核心技术
- java 学习笔记 核心技术I
- Java2核心技术第七版的学习笔记(三) Fundamental Programming Structures in Java(Java语言的基础)(三)
- Java核心技术 卷1 (第十版)学习笔记
- JavaWeb核心技术学习笔记(三)——JavaEE体系概况
- java核心技术学习笔记3---运算符与类型转换
- java学习笔记 第二篇 核心技术
- JAVA2核心技术卷1 学习笔记3 对象和类
- Java核心技术(第9版)学习笔记一
- java核心技术学习笔记8---equals()方法和hashCode()方法
- Java核心技术(第8版)学习笔记_基本的程序设计结构
- java核心技术学习笔记之三程序设计结构
- Java核心技术学习笔记之一:Java的基本程序设计结构
- Java核心技术学习笔记(二)