您的位置:首页 > 编程语言 > Java开发

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函数返回时候需要注意,它实际返回了一个指向该成员的指针,如果这个成员恰好是一个可变对象的话,那么请注意下面的代码:

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之类的对象时是不会发生的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: