第四章
无聊的Date类
A类使用了B类时,只需要:
>javac A.java
即可以编译A和B
java编译器会自动比较.class和.java文件的版本,如果.java较新则自动重新编译之。
访问器最好返回成员变量的拷贝,clone
final修饰成员变量时,声明时可以不给初值,即final空白,在第一次使用之前必须被初始化。
每一个类都可以有一个main方法,可用于单元测试。
Java采用值传递
多个函数具有相同名称不同参数,叫做重载;函数的签名包括函数名称和参数,而不包括返回值。
局部变量未初始化时,会引起编译错误;类成员变量未初始化时会默认被初始化
显示域初始化
java一个构造器可以调用另一个构造器,用this(x,y,z);C++没有这种方式。
第五章
super和this的实现是不同的,super并不是一个对象的引用,不能将super赋值给一个变量,它只是一个指示编译器调用超类方法的特有关键字。
使用this或super调用构造函数时,必须放在首行
Integer Long是「包装器」,对于和基本类型的转换时「编译器」进行的自动打包和拆包,而不是jvm的行为。
java也支持参数数量可变的方法,并且最后一个参数可以传递数组。
main方法也可以写成:
public static void main(String... args)
强制类型转换:
强制类型转换的前提是父类型引用指向的对象类型确实是之类对象,此时才可以进行转换,否则会抛出ClassCastException异常。正确的方式是在转换前通过instanceof来判断。
使用Method实现回调功能,是C程序员的方式,Java应该使用接口实现。
第六章
接口中不能包含实例域或静态方法,但是可以包含常量。
接口中方法默认为public;接口中常量默认为public static final。
一个类只能继承一个超类,但是可以实现多个接口
内部类
内部类可以声明为public或private
内部类的对象有一个隐式引用,它引用了实例化该内部对象的外围类对象,通过这个引用,可以访问外围类对象的全部状态。static内部类没有这种指针
内部类声明为私有,只有其外部类才能够生成内部类对象。只有内部类可以是私有类,而常规类只可以具有包可见性,或公有可见性。
javap命令
内部类会生成outer$inner. class的文件
局部内部类的实现:
注意局部内部类是如何访问final的局部变量的,这里有些像闭包。
当内部类不需要引用任何外部类的对象时,可以声明为static。
声明在接口中的内部类自动成为static和public。