1.方法重载:
参数列表的个数,类型和顺序可以作为重载的标志。
返回值不可以作为重载的标志。原因如下:
int function(){return 0;}
String function(){return " ";}
这两个方法不同的地方就是返回值,如果调用方式是int num = function();这样是可以确定调用的到底是哪个方法,但是如果调用没有赋值,而是直接function();这种编译器就无法知道调用的到底是哪一个方法,因此java遇到这种情况会直接报编译错误。
2.this指针:
在java构造函数中调用同一个类的另外一个构造函数,需要写在最开始的地方,不然会报错。
正确代码:
public TestConstruct(String name, int age){
this();
this.name = name;
this.age = age;
}
3.终结清理和垃圾回收:
一旦垃圾回收准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时才会真正的回收对象占用的内存。
Java的对象并非总是被垃圾回收:
1)对象可能不被垃圾回收。
2)垃圾回收并不等于析构。
3)垃圾回收只与内存有关。
对于与垃圾回收有关的任何行为来说(尤其是finalize()方法),它们必须同内存及其回收有关。
finalize()方法的使用场景是像java通过本地方法调用c/c++代码占用的内存释放。
无论是垃圾回收还是终结,都不保证一定会发生。如果java虚拟机(JVM)未面临内存耗尽的情形,他是不会浪费时间去执行垃圾回收以恢复内存的。
示例:
package initandclean;
public class Test10 {
public static void main(String[] args) {
Cat cat= new Cat(1);
cat = null;
System.gc();
}
}
class Cat{
public Cat(int id){
System.out.println("Cat is created, id=" + id);
}
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("This is finalize.");
}
}
运行结果:
没有调用finalize:
调用了finalize: