第1章 对象导论
第2章 一切都是对象
1、理解static关键词。当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。
第3章 操作符
1、注意 == 操作符和equals()方法的区别。
2、移位操作符<<和>>,对于<<左移操作符,低位补0即可,对于>>右移操作符,采用“符号扩展”,符号为正,在高位插入0,符号为负则在高位插入1。Java中增加了一种有别于其它语言的“无符号”右移操作符>>>,无论正负都在高位插入0。
第4章 控制执行流程
第5章 初始化与清理
1、只能根据参数列表区分重载方法,而不能根据返回值的类型区分重载方法。
2、JVM垃圾回收机制。需要之后深入理解。
3、成员初始化。Java尽力保证,所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,Java以编译时错误的形式来贯彻这种保证。如果类的数据成员是基本类型,那么可以不用初始化,其保证会有一个默认的初始值。在类里定义一个对象引用时,如果不将其初始化,此引用就会获得一个特殊值null。注意初始化时出现的“向前引用”的错误。
4、初始化顺序:类的内部,变量定义的先后顺序决定了初始化的顺序。
5、静态数据的初始化:无论创建多少个对象,静态数据都只占用一份存储区域。static关键字不能应用于局部变量,因此它只能作用于域。初始化的顺序是先静态对象(如果它们还没有因为前面的对象创建过程而被初始化),而后是“非静态对象”。
6、对象的创建过程大概如下:
假设有个名为Dog的类。
a、即便没有显式地使用static关键字,构造器实际上也是静态方法,因此,当首次创建类型为Dog的对象时(构造器可以看做static方法),或者Dog类的静态方法/静态域首次被访问时,Java解释器必须查找类路径,以定位Dog.class文件。
b、然后载入Dog.class,有关静态初始化的所有动作都会执行。因此,静态初始化只在Class对象首次加载的时候进行一次。
c、当用new Dog() 创建对象的时候,首先将在堆上为Dog对象分配足够的存储空间。
d、这块存储空间会被清零,这就自动地将Dog对象中的所有基本类型数据都设置成了默认值,而引用则被设置成了null。
e、执行所有出现于字段定义处的初始化动作。
f、执行构造器。
第6章 访问权限控制
1、关键字
private
protected:继承访问权限。
public:接口访问权限。
默认访问权限:包访问权限。
第7章 复用类
1、可以通过组合语法,继承语法,代理,结合使用组合和继承等方法实现类的复用。
2、@Override 的使用,当想要覆写某个方法时,可以选择添加这个注解,在不小心重载并非覆写了该方法时,编译器会生成错误信息。
3、在组合和继承之间做合适选择。一般来说,is-a关系用继承表达,has-a关系用组合表达。究竟改用组合还是用继承,一个比较清晰的判断方法就是看是否需要从新类向基类进行向上转型,如果必须向上转型,那么继承是必要的;如果不需要,则应该慎重考虑是否需要继承。
4、final关键字:包括final参数,final方法, final类的意义。
第8章 多态
1、面向对象的语言的特征:数据抽象,继承和多态。
2、前期绑定和后期绑定:Java中除了static方法和final方法(private方法属于final方法)之外,其他所有的方法都是后期绑定。实际上将方法声明为final的一个重要原因之一是防止他人覆盖该方法,另一个更为重要的原因则是有效关闭动态绑定。
3、缺陷:试图覆盖私有方法。实际上试图在继承类中覆盖基类的私有方法是不对的,如果使用了@Override注解,那么编译会报错,而如果没有使用该注解,那么实际上我们试图要覆盖的那个方法是全新的方法,甚至因为private的权限,这也不是重载。事实上只有非private方法才能被覆盖。
4、复杂对象调用构造器按照下面的顺序:a、在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的零;b、调用基类构造器;c、按声明顺序调用成员的初始化方法;d、调用导出类构造器的主体。