Object是所有类的超类,所有的类都直接或间接的继承了Object。每一个子类都会从父类继承属性或者方法,但是Java是一个单继承语言,子类除了可以用父类的东西,也可以从超类中获得,所有Object中所有的方法,子类都可以用。
方法摘要:(个人理解)
protected Object | clone() 对象克隆,很少使用 |
boolean | equals(Object obj) 用于判断两个对象的内容是否一样 |
protected void | finalize() 当对象被垃圾回收器回收时,会执行对象的finalize()发方法,但是垃圾回收器在什么时候回收这个对象不确定,即这个方法的执行时间不确定,一般不用 |
Class<?> | getClass() 返回对象的运行时类对象,可以简单的理解为返回对象的类的字节码文件 |
int | hashCode() 返回该对象的哈希码值 |
void | notify() 在线程中用于唤醒等待中的 线程 |
void | notifyAll() 唤醒在此对象监视器上等待的所有线程 |
String | toString() 把对象转换成字符串 |
void | wait() 在多线程中,让线程等待 |
toString()
Person类
public class Person {
String name;
int age;
String gender;
public Person(String name, int age, String gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "姓名:" + name + "年龄:" + age + "性别:" + gender;
}
//重写toString
}
Test01类
public class Test01 {
public static void main(String[] args) {
Person per = new Person("张三",21,"男");
System.out.println(per);
/*
* 运行结果为:com.LearnTest02.day01.Person@27973e9b
* 一串地址
*
* 因为:
* ①使用System.out.println(per);打印一个对象,在println()方法中,会先把对象转换为字符串再输出
* 调用了String.valueOf(x)方法把对象转换为字符串
* ②在String类valueOf(x)方法中调用了对象的toString()把对象转换为字符串
* ③toString是从Object类继承来的,在Object类中的toString()返回以下内容:
* getClass().getName() + "@" + Integer.toHexString(hashCode())
* com.LearnTest02.day01.Person@27973e9b
*
* 所以:
* 使用System.out.println(per);打印一个对象时,会调用对象的toString()方法
*
* 解决方法:
* 重写toString方法
*
*/
}
}
重写toString方法前
结果为:
重写toString方法后
结果为:
总结:
作用:把对象转换成字符串
应用场景:System.out.println(per);打印per对象时,会调用对象的toString()方法
当打印对象时,想显示对象的各个字段值,需要重写toString()方法
注:打印一个类的对象时,如果显示的不是完整的 类名@十六进制形式 时,肯定重写了toString方法()
getClass().getName() + "@" + Integer.toHexString(hashCode())