3.4
本节讲到Java的赋值的内容,需要区别的是基本类型(int,bool)的赋值和对象的赋值不太一样。对象之间的赋值,实际是将”引用”从一个地方复制到另一个地方。这意味着如果对对象使用c=d,那么c和d都指向原本只有d指向的那个对象,这个时候对c或者对d对象做更改,c和d都会改变。这种现象称为Java的“别名现象”
3.7
本节讲到关系操作符时,又一次体现了对象引用的的知识,当两个对象进行“==”操作符进行比较的时候,其实比较的是这两个对象的引用地址,而不是内容。
请看书本上面带的例子
public class Equivalence{
public static void main(Sting[] args){
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
}
/*Output:
false
true
*
所以对象的比较实用equals()。自定义类就要覆盖equals方法来实现比较了。
6.3
类里面接口的顺序可能会采用public,protected,private的次序来创建,这样便于使用者从头读起,首先阅读对他们最重要的部分
6.4
类既不可以是private的,也不可以是protected的,如果希望增加访问权限,可以把构造器都指定成private,从而阻止任何人创建该类的对象,但是有一个类外,就是你在该类的static成员内部可以创建
class Soup2{
private Soup2(){}
private static Soup2 ps1 = new Soup2();
plublic static Soup2 access(){
return ps1;
}
}
这种方式也是传说中的单例设计
7.3
Java的代码复用只要方式是组合和继承,代理也是一种方式。代理其实就是用一个类对另一个类进行了封装,提供接口给外部调用。
7.4.2
Java的基类如果拥有一个多次被重载的方法,那么在这个基类的子类中该方法不会被屏蔽,这点和c++的继承不一样
@Override注解的作用,当你重载了原本是需要覆写的基类方法时,编译器会报错
7.8.3
final的一个用途是用来修饰类或者类的方法,禁止继承和覆盖。