java pitfalls读书笔记
以前做的笔记,供需要的朋友参考
刚从图书馆借了几本不错的java经典书籍,翻了翻,做了一些摘抄比较。
·实例方法被覆盖,静态方法被隐藏,即静态方法不能被覆盖
·试图用子类的静态方法隐藏父类中同样标识的实例方法是不合法的。编译器会报错。
·试图用子类的实例方法覆盖父类中同样标识的静态方法是不合法的,编辑器会报错。
·静态方法和final方法是不能被覆盖的。
·实例方法能够被覆盖
·抽象方法必须在具体类中被覆盖
·在执行等式比较时,应该始终使用String.equals()而不是==比较符,单n and m均为String实例的引用时,语句n.equals(m)与n.intern() == m.intern()得到的结果是一样的。
·在java中boolean类型是不可转换的。非boolean类型数据之间的转换是合理的。
·当基本类型的值能够在不损失数值的情况下被转换时,转换操作会自动发生。
·在扩展转换的情况下,会发生隐性转换,在三种情况下会发生隐性转换:赋值、方法调用和算术运算。与赋值语句不同的时,隐性的窄化转换不支持方法调用,这时编译不会通过。算术运算时,较窄类型总是被转换成较宽的类型。
·当创建了一个覆盖父类实例方法的子类时,访问那些被覆盖方法的唯一途径就是使用super关键字。任何使用子类的外部类,永远不能调用父类的这些被覆盖的实例方法。
·无法访问父类中被子类覆盖的方法的原则,仅仅适用于实例方法,也就是非静态方法,即使父类中的静态方法被子类“覆盖(并非真的覆盖,只是子类具有了与父类同名的静态方法)”了,他们仍然能被访问。强制转换为父类的类型就能达到这个目的。
·如果你发现自己实现的一个构造函数,调用了一个室友的方法,或者需要许多的参数,请确信这样做是必要的
·在clone的时候不必创建不可变对象的副本。因为对象的值本身是不会发生改变的,创建它的副本就是在浪费内存。但是创建可变对象的不同副本很重要,可以避免对象的不同副本共享同一可变对象的引用。创建一个深度副本的时候必须确定每一个对象都被成功clone。