toString与finalize
toString和finalize都是Java中Object类的方法。
toString方法用于返回对象的字符串表示形式。在Object类中,toString的默认实现返回一个字符串,该字符串包含对象的类名(包名和类名)、@ 符号以及表示对象内哈希码的十六进制表示。
Object源码为:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
然而,对于自定义类,通常会重写toString方法以提供更有意义的字符串表示。例如,对于一个Person类,你可能会重写toString方法如下:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override//重写toString方法,一般是输出对象的属性(可以使用快捷键)
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
这样,当你调用new Person("Alice", 30).toString()时,将返回"Person{name='Alice', age=30}",这比默认的toString输出更有意义。
当直接输出一个对象时,toString方法会默认调用。例如:
package toStringTest;
public class toStringTest001 {
public static void main(String[] args) {
ToString t = new ToString("与姜昆",22);
System.out.println(t.toString());
System.out.println(t);
//二者等价
}
}
class ToString{
private String name;
private int age;
public ToString(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "ToString{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
finalize 方法(简单了解)
finalize方法是Java垃圾回收机制的一部分,它是一个特殊的方法,用于在对象被垃圾回收器回收之前执行一些清理工作。例如,释放系统资源或执行必要的清理操作。
当对象被回收时,系统自动调用该对象的finalize方法,子类可以重写该方法,做一些释放资源的操作。
回收:当某个对象没有任何引用时,则JVM(即Java虚拟机)就认为这个对象是一个垃圾对象,就会使用垃圾回收机制销毁该对象。在销毁该对象前,会先调用finalize方法。
package toStringTest;
public class toStringTest001 {
public static void main(String[] args) {
ToString t = new ToString("与姜昆",22);
System.out.println(t.toString());
ToString t1 = new ToString("勺子长",12);
t1 = null;//此时new ToString("勺子长",12)被视为垃圾
//被销毁前会调用该对象的finalize方法,没有则调用Object中的方法
//System.gc();//主动使用,才会输出嘻嘻~
}
}
class ToString{
private String name;
private int age;
public ToString(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "ToString{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
protected void finalize() throws Throwable {
//super.finalize();//调用父类的方法。
System.out.println("嘻嘻~");//嘻嘻~并不会输出。
}
//finalize方法在现在其实不再使用了。了解其可。
}
总结
toString方法用于提供对象的友好字符串表示,通常用于调试和日志记录。
finalize方法用于对象被垃圾回收前的资源清理,但现代Java编程中不推荐使用,应采用其他资源管理技术。