目录
- 专栏导读
- 一、Object类简介
- 二、Object提供了11种方法
- 1、clone()
- 2、getClass()
- 3、toString()
- 4、finalize()
- 5、equals()
- 6、hashCode()
- 7、wait()
- 8、notify()
- 9、notifyAll()
专栏导读
🏆作者简介:哪吒,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家💪 ,专注Java硬核干货分享,立志做到Java赛道全网Top N。
🏆本文收录于Java基础教程系列(进阶篇),本专栏是针对大学生、初级Java工程师精心打造,针对Java生态,逐个击破,不断学习,打通Java技术栈。
🏆订阅后,可以阅读Java基础教程系列(进阶篇)中全部文章,包含Java基础、Java高并发、Spring、MySQL等Java进阶技术栈。
🏆还可以订阅其姐妹篇,Java基础教程系列,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。
🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。
🏆面试福音:10万字208道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()
toString()方法返回一个字符串。
toString()无处不在,只要对象与一个字符串通过操作符 + 拼接,Java编译器就会自动地调用toString方法来获得这个对象的字符串描述。
还有我们最常用的System.out.println(name)
方法,println会自动的调用name.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();
该方法唤醒在该对象上等待的所有线程。
更多推荐
49天精通Java,第14天,java object类
发布评论