Java进阶之路_重温《java编程思想》篇(二)

1.方法重载:

参数列表的个数,类型和顺序可以作为重载的标志。

        返回值不可以作为重载的标志。原因如下:

int function(){return 0;}

String function(){return " ";}

     这两个方法不同的地方就是返回值,如果调用方式是int num = function();这样是可以确定调用的到底是哪个方法,但是如果调用没有赋值,而是直接function();这种编译器就无法知道调用的到底是哪一个方法,因此java遇到这种情况会直接报编译错误。


2.this指针:

在java构造函数中调用同一个类的另外一个构造函数,需要写在最开始的地方,不然会报错。

Java进阶之路_重温《java编程思想》篇(二)_第1张图片

正确代码:

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:

Java进阶之路_重温《java编程思想》篇(二)_第2张图片

调用了finalize:        

Java进阶之路_重温《java编程思想》篇(二)_第3张图片


你可能感兴趣的:(Java进阶之路_重温《java编程思想》篇(二))