登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
代码拉取完成,页面将自动刷新
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
3
Star
47
Fork
23
DreamCoders
/
CoderGuide
代码
Issues
1169
Pull Requests
0
Wiki
统计
流水线
服务
JavaDoc
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
开发画像分析
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
说说Object类下面有几种方法呢?
待办的
#IAJKPF
陌生人
拥有者
创建于
2024-08-13 10:04
<p style="text-align: start;">这是一道基础题型,不过很多人会忽略或者至少说不完整,但是面试时被问到的几率还是很大的。</p><h2 style="text-align: start;"><span style="color: inherit;">面试题</span></h2><p style="text-align: start;">Object有几种方法呢?</p><blockquote style="text-align: start;">Java语言是一种单继承结构语言,Java中所有的类都有一个共同的祖先。这个祖先就是Object类。如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。Object的方法我们在平时基本都会用到,但如果没有准备被忽然这么一问,还是有点懵圈的。</blockquote><h2 style="text-align: start;"><span style="color: inherit;">分析</span></h2><p style="text-align: start;">Object类是Java中所有类的基类。位于java.lang包中,一共有13个方法。如下图:</p><p style="text-align: center;"><img src="https://jsd.onmicrosoft.cn/gh/iGaoWei/codercdn@master/question/20240627/2024062710570845076.png" alt="https://jsd.onmicrosoft.cn/gh/iGaoWei/codercdn@master/question/20240627/2024062710570845076.png" data-href="" style=""></p><h2 style="text-align: start;"><span style="color: inherit;">具体解答</span><br></h2><h3 style="text-align: start;"><span style="color: inherit;">1.Object()</span></h3><p style="text-align: start;">这个没什么可说的,Object类的构造方法。<span style="color: rgb(255, 0, 0);">(非重点)</span></p><h3 style="text-align: start;"><span style="color: inherit;">2.registerNatives()</span></h3><p style="text-align: start;">为了使JVM发现本机功能,他们被一定的方式命名。例如,对于java.lang.Object.registerNatives,对应的C函数命名为Java_java_lang_Object_registerNatives。</p><p style="text-align: start;">通过使用registerNatives(或者更确切地说,JNI函数RegisterNatives),可以命名任何你想要你的C函数。<span style="color: rgb(255, 0, 0);">(非重点)</span></p><h3 style="text-align: start;"><span style="color: inherit;">3.clone()</span></h3><p style="text-align: start;">clone()函数的用途是用来另存一个当前存在的对象。只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。<span style="color: rgb(255, 0, 0);">(注意:回答这里时可能会引出设计模式的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">4.getClass()</span></h3><p style="text-align: start;">final方法,用于获得运行时的类型。该方法返回的是此Object对象的类对象/运行时类对象Class。效果与Object.class相同。<span style="color: rgb(255, 0, 0);">(注意:回答这里时可能会引出类加载,反射等知识点的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">5.equals()</span></h3><p style="text-align: start;">equals用来比较两个对象的内容是否相等。默认情况下(继承自Object类),equals和==是一样的,除非被覆写(override)了。<span style="color: rgb(255, 0, 0);">(注意:这里可能引出更常问的“equals与==的区别”及hashmap实现原理的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">6.hashCode()</span></h3><p style="text-align: start;">该方法用来返回其所在对象的物理地址(哈希码值),常会和equals方法同时重写,确保相等的两个对象拥有相等的hashCode。<span style="color: rgb(255, 0, 0);">(同样,可能引出hashmap实现原理的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">7.toString()</span></h3><p style="text-align: start;">toString()方法返回该对象的字符串表示,这个方法没什么可说的。</p><h3 style="text-align: start;"><span style="color: inherit;">8.wait()</span></h3><p style="text-align: start;">导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。<span style="color: rgb(255, 0, 0);">(引出线程通信及“wait和sleep的区别”的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">9.wait(long timeout)</span></h3><p style="text-align: start;">导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。<span style="color: rgb(255, 0, 0);">(引出线程通信及“wait和sleep的区别”的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">10.wait(long timeout, int nanos)</span></h3><p style="text-align: start;">导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。<span style="color: rgb(255, 0, 0);">(引出线程通信及“wait和sleep的区别”的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">11.notify()</span></h3><p style="text-align: start;">唤醒在此对象监视器上等待的单个线程。<span style="color: rgb(255, 0, 0);">(引出线程通信的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">12. notifyAll()</span></h3><p style="text-align: start;">唤醒在此对象监视器上等待的所有线程。<span style="color: rgb(255, 0, 0);">(引出线程通信的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">13.finalize()</span></h3><p style="text-align: start;">当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。<span style="color: rgb(255, 0, 0);">(非重点,但小心引出垃圾回收的提问)</span></p><h2 style="text-align: start;"><span style="color: inherit;">引申常见问题</span></h2><ul><li style="text-align: justify;">equals() 与 == 的区别是什么?</li><li style="text-align: justify;">hashCode() 和 equals() 之间有什么联系?</li><li style="text-align: justify;">wait()方法与sleep()方法的区别</li><li style="text-align: justify;">为什么重写了equals就必须重写hashCode</li><li style="text-align: justify;">HashMap的实现原理</li><li style="text-align: justify;">谈谈类加载机制</li></ul><p style="text-align: start;">后续我们就这些常见问题一一做一些解答,当然,可能大部分人对这类问了八百遍的问题已经倒背如流了</p>
<p style="text-align: start;">这是一道基础题型,不过很多人会忽略或者至少说不完整,但是面试时被问到的几率还是很大的。</p><h2 style="text-align: start;"><span style="color: inherit;">面试题</span></h2><p style="text-align: start;">Object有几种方法呢?</p><blockquote style="text-align: start;">Java语言是一种单继承结构语言,Java中所有的类都有一个共同的祖先。这个祖先就是Object类。如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。Object的方法我们在平时基本都会用到,但如果没有准备被忽然这么一问,还是有点懵圈的。</blockquote><h2 style="text-align: start;"><span style="color: inherit;">分析</span></h2><p style="text-align: start;">Object类是Java中所有类的基类。位于java.lang包中,一共有13个方法。如下图:</p><p style="text-align: center;"><img src="https://jsd.onmicrosoft.cn/gh/iGaoWei/codercdn@master/question/20240627/2024062710570845076.png" alt="https://jsd.onmicrosoft.cn/gh/iGaoWei/codercdn@master/question/20240627/2024062710570845076.png" data-href="" style=""></p><h2 style="text-align: start;"><span style="color: inherit;">具体解答</span><br></h2><h3 style="text-align: start;"><span style="color: inherit;">1.Object()</span></h3><p style="text-align: start;">这个没什么可说的,Object类的构造方法。<span style="color: rgb(255, 0, 0);">(非重点)</span></p><h3 style="text-align: start;"><span style="color: inherit;">2.registerNatives()</span></h3><p style="text-align: start;">为了使JVM发现本机功能,他们被一定的方式命名。例如,对于java.lang.Object.registerNatives,对应的C函数命名为Java_java_lang_Object_registerNatives。</p><p style="text-align: start;">通过使用registerNatives(或者更确切地说,JNI函数RegisterNatives),可以命名任何你想要你的C函数。<span style="color: rgb(255, 0, 0);">(非重点)</span></p><h3 style="text-align: start;"><span style="color: inherit;">3.clone()</span></h3><p style="text-align: start;">clone()函数的用途是用来另存一个当前存在的对象。只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。<span style="color: rgb(255, 0, 0);">(注意:回答这里时可能会引出设计模式的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">4.getClass()</span></h3><p style="text-align: start;">final方法,用于获得运行时的类型。该方法返回的是此Object对象的类对象/运行时类对象Class。效果与Object.class相同。<span style="color: rgb(255, 0, 0);">(注意:回答这里时可能会引出类加载,反射等知识点的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">5.equals()</span></h3><p style="text-align: start;">equals用来比较两个对象的内容是否相等。默认情况下(继承自Object类),equals和==是一样的,除非被覆写(override)了。<span style="color: rgb(255, 0, 0);">(注意:这里可能引出更常问的“equals与==的区别”及hashmap实现原理的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">6.hashCode()</span></h3><p style="text-align: start;">该方法用来返回其所在对象的物理地址(哈希码值),常会和equals方法同时重写,确保相等的两个对象拥有相等的hashCode。<span style="color: rgb(255, 0, 0);">(同样,可能引出hashmap实现原理的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">7.toString()</span></h3><p style="text-align: start;">toString()方法返回该对象的字符串表示,这个方法没什么可说的。</p><h3 style="text-align: start;"><span style="color: inherit;">8.wait()</span></h3><p style="text-align: start;">导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。<span style="color: rgb(255, 0, 0);">(引出线程通信及“wait和sleep的区别”的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">9.wait(long timeout)</span></h3><p style="text-align: start;">导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。<span style="color: rgb(255, 0, 0);">(引出线程通信及“wait和sleep的区别”的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">10.wait(long timeout, int nanos)</span></h3><p style="text-align: start;">导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。<span style="color: rgb(255, 0, 0);">(引出线程通信及“wait和sleep的区别”的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">11.notify()</span></h3><p style="text-align: start;">唤醒在此对象监视器上等待的单个线程。<span style="color: rgb(255, 0, 0);">(引出线程通信的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">12. notifyAll()</span></h3><p style="text-align: start;">唤醒在此对象监视器上等待的所有线程。<span style="color: rgb(255, 0, 0);">(引出线程通信的提问)</span></p><h3 style="text-align: start;"><span style="color: inherit;">13.finalize()</span></h3><p style="text-align: start;">当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。<span style="color: rgb(255, 0, 0);">(非重点,但小心引出垃圾回收的提问)</span></p><h2 style="text-align: start;"><span style="color: inherit;">引申常见问题</span></h2><ul><li style="text-align: justify;">equals() 与 == 的区别是什么?</li><li style="text-align: justify;">hashCode() 和 equals() 之间有什么联系?</li><li style="text-align: justify;">wait()方法与sleep()方法的区别</li><li style="text-align: justify;">为什么重写了equals就必须重写hashCode</li><li style="text-align: justify;">HashMap的实现原理</li><li style="text-align: justify;">谈谈类加载机制</li></ul><p style="text-align: start;">后续我们就这些常见问题一一做一些解答,当然,可能大部分人对这类问了八百遍的问题已经倒背如流了</p>
评论 (
0
)
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
Java
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (
-
)
标签 (
-
)
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(1)
1
https://gitee.com/DreamCoders/CoderGuide.git
git@gitee.com:DreamCoders/CoderGuide.git
DreamCoders
CoderGuide
CoderGuide
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册