1:函数的重载参数列表需要不相同,如果定义了两个方法f(double),f(int),如果调用f(4)会优先调用第二个方法,如果第二个方法没有则会调用第一个方法。方法的返回值类型也可以用来区分函数重载,这些都是编译时的多态。
2:构造器是一种特殊类型的方法,因为它没有返回值。
3:java中对象可能不被垃圾回收。finalize()方法会在垃圾回收器作用之前调用。
4:无论是垃圾回收还是finalize()都不一定会起作用,只有在内存要耗尽的情况下才可能被调用。但是finalize可以做一些验证工作,并将错误的信息输出出来。
4:c++里的堆更像一个院子,里面的每个对象都负责管理自己的地盘,一段时间对象被销毁,地盘需重用,java更像是传送带,每分配一个新对象,它就往前移动一格,效率很高。
5:序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
6:编译器会暗自将所操作对象的引用作为第一个参数传递给类中函数。也就清楚了当前哪个对象调用了类中的这个方法。this关键字代表了当前调用方法的对象的引用,只在方法内部使用。由此this有两个作用:
a.让一个对象持续的调用某个方法(方法的返回值是对象的引用)
b.this关键字作为引用传递给其他的方法。
7:static就是没有this的方法。
8:垃圾回收技术主要是:先遍历引用,将存活的引用从一个地方复制到另外一个地方,这是停止-复制技术。但是当存活率很高是很耗性能,于是有了标记-清扫技术,但是清扫后会留下空白。
9:初始化
a.类的成员变量会在方法调用前初始化(包括构造方法),静态变量先按定义顺序初始化,然后非静态变量按定义顺序初始化。
b.static块会在调用创建对象或者调用静态变量前初始化。