Java零基础入门 12:Java中的Object类

? 周周有福利,周周有惊喜 哪吒社区 - 风火轮计划

? Java学习路线配套文章:Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

? Java经典面试题大全:10万字208道Java经典面试题总结(附答案)

? 简介:Java领域优质创作者?、CSDN哪吒公众号作者✌ 、Java架构师奋斗者?
? 扫描主页左侧二维码,加入群聊,一起学习、一起进步
? 欢迎点赞 ? 收藏 ⭐留言 ?

一、Object类简介

Object类是Javajava.lang包下的核心类,Object类是所有类的父类,何一个类时候如果没有明确的继承一个父类的话,那么它就是Object的子类;
Java中所有的类默认继承Object类。

package com.guor.es.test;

public class Student {
    private Integer id;
    private String name;
}

package com.guor.es.test;

public class Student extends Object{
    private Integer id;
    private String name;
}

二者的效果是一样的。

二、Object提供了11种方法

1、clone()

protected native Object clone() throws CloneNotSupportedException;

实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

2、getClass()

public final native Class<?> getClass();

final方法,返回Class类型的对象,反射来获取对象。

3、toString()

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

通过转为字符串,获取对象信息。
Object是最常见的Object方法。

package com.guor.es.test;

public class Student extends Object{
    private Integer id;
    private String name;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + ''' +
                '}';
    }
}

4、finalize()

protected void finalize() throws Throwable { }

该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

5、equals()

public boolean equals(Object obj) {
        return (this == obj);
    }

判断内容是否相等,注意,这里比较的不是内存地址。
java语言规范要求equals方法具有下面的特性:

  • 自反性:对于任何非空引用x,x.equals(x)应该返回true;
  • 对称性:对于任何引用x,和y,当且仅当,y.equals(x)返回true,x.equals(y)也应该返回true;
  • 传递性:对于任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true;
  • 一致性:如果x,y引用的对象没有发生变化,反复调用x.equals(y)应该返回同样的结果;
  • 对于任意非空引用x,x.equals(null)返回false;

6、hashCode()

public native int hashCode();

该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
Java中Object有一个方法:

public native int hashcode();

(1)hashcode()方法的作用

hashcode()方法主要配合基于散列的集合一起使用,比如HashSet、HashMap、HashTable。

当集合需要添加新的对象时,先调用这个对象的hashcode()方法,得到对应的hashcode值,实际上hashmap中会有一个table保存已经存进去的对象的hashcode值,如果table中没有改hashcode值,则直接存入,如果有,就调用equals方法与新元素进行比较,相同就不存了,不同就存入。

(2)equals和hashcode的关系

如果equals为true,hashcode一定相等;

如果equals为false,hashcode不一定不相等;

如果hashcode值相等,equals不一定相等;

如果hashcode值不等,equals一定不等;

(3)重写equals方法时,一定要重写hashcode方法

7、wait()

public final native void wait(long timeout) throws InterruptedException;
public final void wait(long timeout, int nanos) throws InterruptedException {
        if (timeout < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (nanos < 0 || nanos > 999999) {
            throw new IllegalArgumentException(
                                "nanosecond timeout value out of range");
        }

        if (nanos > 0) {
            timeout++;
        }

        wait(timeout);
    }

wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生。

  • 其他线程调用了该对象的notify方法。
  • 其他线程调用了该对象的notifyAll方法。
  • 其他线程调用了interrupt中断该线程。
  • 时间间隔到了。

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

8、notify()

public final native void notify();

该方法唤醒在该对象上等待的某个线程。

9、notifyAll()

public final native void notifyAll();

该方法唤醒在该对象上等待的所有线程。

上一篇:Java零基础入门 11:Java继承

下一篇:敬请期待

在这里插入图片描述

添加微信,备注1024,赠送Java学习路线思维导图

扫码加入技术交流群!


 

关注微信公众号,回复1024,
获取Java思维导图

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>