目录
一、Object类介绍
Object类所处位置:java.lang包下,不需要导包就可以直接使用。
Object类是所有类的直接或者间接的超类,也就是说Object是所以类的父类,一个类没有明确继承某个类,那么它就一定继承了Object类。
//以下两种写法是相同的
class Person{
}
class Person extends Object{
}
//为什么说Object类是所以类的超类呢?
class Student extends Person{//Student间接继承了Object类,所以说Object是所以类的超类
}
继承Object类举例说明:
class Person{ } class Student extends Person{ } public class Demo{ public static void main(String[] args) { //多态的形式,说明他们两个类都有继承Object类 Object o1=new Person();//向上转型的方式 Object o2=new Student();//向上转型的方式 } }
二、Object类常用成员方法
1.public final Class<?> getClass()
2.public int hashCode()
3.public boolean equals(Object obj)
4.protected Object clone() throws CloneNotSupportedException
5.public String toString()
6.public final void notify()
7.public final void notifyAll()
8.public final void wait(long timeout) throws InterruptedException
9.public final void wait(long timeout, int nanos) throws InterruptedException
10.public final void wait() throws InterruptedException
11.protected void finalize() throws Throwable
那么每个方法是怎么使用的呢?
1.public final Class<?> getClass()
getClass返回此Object运行时该类的对象,该方法返回一个class对象。获得对象当前的类类型。
2.public int hashCode()
该方法用于哈希查找,重写了equlas方法一般都需要重写hashCode方法。在集合中有用到。
此作者讲的非常详细:《必须掌握的hashcode()方法》
3.public boolean equals(Object obj)
指示其它某个对象是否与此对象“相等”(不是地址值的相同,是两个对象的属性是否完全一致)
举例:
equals和==号的区别:
==号两边是基本数据类型数据,比较的就是数值的大小。
==如果两边是引用数据类型数据,比较的就是地址值。
equals比较连个对象的属性是否一致。
4.protected Object clone() throws CloneNotSupportedException
创建并返回此对象的副本,只有实现了Cloneable接口才能够调用此方法,否则需要抛出CloneNotSupportedException异常。
5.public String toString()
子类重写Object类的toString方法,可以获取对象的信息。
当我们在输出语句中打印一个对象的时候,会默认调用该对象toString()方法
举例:
public class Demo02{
public static void main(String[] args) {
//子类重写toString方法
Person p1=new Person("tom",13);
Person p2=new Person("jerry",19);
System.out.println(p1.toString());
System.out.println(p2.toString());
}
}
class Person{
private String name;
private int age;
public Person(){
}
public Person(String name,int age){
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
每一个类都包含有toString()方法,但是不是每一个类都重写(覆盖)了toString()
Object类中toString方法的源码:
返回的是当前对象的全限定类名和十六进制哈希值字符串。
6.public final void notify()
唤醒单个线程,随机选取一个等待池的线程进入锁池去竞争获取锁的机会
7.public final void notifyAl,l()
会让所有处于等待池的线程全部进入锁池去竞争获取锁的机会。
8.public final void wait() throws InterruptedException
让当前线程进入等待状态进入睡眠状态,同时wait()也会让当前线程释放他所持有的锁。直到其他线程调用此对象的notify()方法或notifyAll()方法,其他线程调用了interrupt中断该线程,时间间隔到了。
11.protected void finalize() throws Throwable
该方法用于释放资源。很少使用。