🍅 周周有福利,周周有惊喜 哪吒社区 - 风火轮计划
🍅 Java学习路线配套文章:Java学习路线总结,搬砖工逆袭Java架构师(全网最强)
🍅 Java经典面试题大全:10万字208道Java经典面试题总结(附答案)
🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪
🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步
🍅 欢迎点赞 👍 收藏 ⭐留言 📝
目录
- 一、Object类简介
- 二、Object提供了11种方法
- 1、clone()
- 2、getClass()
- 3、toString()
- 4、finalize()
- 5、equals()
- 6、hashCode()
- 7、wait()
- 8、notify()
- 9、notifyAll()
一、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继承
下一篇:敬请期待