首页 > 编程语言 >java基础:Object中的常用方法

java基础:Object中的常用方法

时间:2023-11-05 19:32:57浏览次数:28  
标签:常用 java Object equals hashCode 线程 方法 wait


介绍下Object中的常用方法

java基础:Object中的常用方法_父类

clone 方法
  保护方法,实现对象的浅复制,只有实现了 Cloneable 接口才可以调用该方法,否则抛出
CloneNotSupportedException 异常,深拷贝也需要实现 Cloneable,同时其成员变量为引用类型
的也需要实现 Cloneable,然后重写 clone 方法。

finalize 方法

  该方法和垃圾收集器有关系,判断一个对象是否可以被回收的最后一步就是判断是否重写了此方
法。

equals 方法
  该方法使用频率非常高。一般 equals 和 == 是不一样的,但是在 Object 中两者是一样的。子类一
般都要重写这个方法。

hashCode 方法
  该方法用于哈希查找,重写了 equals 方法一般都要重写 hashCode 方法,这个方法在一些具有哈
希功能的 Collection 中用到。
  一般必须满足 obj1.equals(obj2)==true 。可以推出 obj1.hashCode()==obj2.hashCode() ,但是
hashCode 相等不一定就满足 equals。不过为了提高效率,应该尽量使上面两个条件接近等价。

  • JDK 1.6、1.7 默认是返回随机数;
  • JDK 1.8 默认是通过和当前线程有关的一个随机数 + 三个确定值,运用 Marsaglia’s xorshift
    scheme 随机数算法得到的一个随机数。

wait 方法

  配合 synchronized 使用,wait 方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait() 方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。

  1. 其他线程调用了该对象的 notify 方法;
  2. 其他线程调用了该对象的 notifyAll 方法;
  3. 其他线程调用了 interrupt 中断该线程;
  4. 时间间隔到了。
    此时该线程就可以被调度了,如果是被中断的话就抛出一个 InterruptedException 异常。

notify 方法
  配合 synchronized 使用,该方法唤醒在该对象上等待队列中的某个线程(同步队列中的线程是给抢占 CPU 的线程,等待队列中的线程指的是等待唤醒的线程)。
notifyAll 方法
  配合 synchronized 使用,该方法唤醒在该对象上等待队列中的所有线程。
总结
  只要把上面几个方法熟悉就可以了,toString 和 getClass 方法可以不用去讨论它们。该题目考察的是对 Object 的熟悉程度,平时用的很多方法并没看其定义但是也在用,比如说:wait() 方法,equals() 方法等。

Class Object is the root of the class hierarchy.Every class has Object as a
superclass. All objects, including arrays, implement the methods of this class.

大致意思:Object 是所有类的根,是所有类的父类,所有对象包括数组都实现了 Object 的方法。


标签:常用,java,Object,equals,hashCode,线程,方法,wait
From: https://blog.51cto.com/zhangxueliang/8194808

相关文章

  • java集合:什么是 fail-fast?
    说说什么是fail-fast?  fail-fast机制是Java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。  例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了,那么线程A访问集合时,就会......
  • java基础:static都有哪些用法?
    static都有哪些用法?  所有的人都知道static关键字这两个基本的用法:静态变量和静态方法.也就是被static所修饰的变量/方法都属于类的静态资源,类实例所共享.  除了静态变量和静态方法之外,static也用于静态块,多用于初始化操作:publiccalssPreCache{static{//执行相关......
  • java基础:再哈希法解决哈希冲突代码示例
    再哈希法(Rehashing)是解决哈希冲突的另一种方法。它与开放定址法不同,再哈希法使用多个哈希函数来确定冲突元素的位置,而不是在同一个哈希表中进行探测。下面是一个使用再哈希法解决哈希冲突的示例代码:publicclassRehashingHashTable{privateEntry[]table;privateint......
  • java基础:深拷贝和浅拷贝的区别是什么?
    深拷贝和浅拷贝的区别是什么?原型模式:设计模式-->Springbean的Scope浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.深拷贝:被复制对象的所有变量都含有与原来......
  • ACM竞赛常用算法模板(C++)
    1.快速排序AcWing785.快速排序:https://www.acwing.com/problem/content/787/题目描述给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数n。第二行包含n个整数(所有整数均在1∼10......
  • Java拾贝第十七天——反射之初认Class类
    反射反射可以在运行中知晓任意类的任意属性和方法。这种动态获取信息的功能称之为反射。小栗子packagemoudle2;publicclassTest17{publicstaticvoidmain(String[]args){Test17t17=newTest17();System.out.println(t17.getClass());......
  • Java+Jsp+MySQL高校选课系统设计与实现(附源码下载地址)
    @目录01源码下载02系统概述03开发工具及技术选型04运行环境05用户分析06功能分析07数据库设计08项目工程结构及说明09部分功能展示及源码9.1管理员端--首页9.2管理员端--专业管理9.3管理员--课程管理9.4管理员端--统计信息9.5普通用户端--基本信息9.6普通用户端--......
  • Java根据文本内容,批量修改文件名称
    这两天学到IO流对文件的操作,想起在几年前有几百个按"1,2,3"排序命名的短文,于是产生将其批量命名后整理的想法.这批文本的名称在文件内第十行的位置,前面的是广告和其他不相关的东西本想构造抓到第九行广告语后返回下一行文本的方法,没能实现,只好用了更简单直接的直接抓第十行......
  • Eclipse 常用快捷键
    快速修正:Ctrl+1 显示搜索对话框:Ctrl+H快速Outline:Ctrl+O打开资源:Ctrl+Shift+R打开类型:Ctrl+Shift+T (可以打开JDK内置的class)显示重构菜单:Alt+Shift+T 6重构 显示重构菜单:Alt+Shift+T重构-改变方法签名:Alt+Shift+C重构-移动:Alt+Shift+V重构-重命名:Alt+Shift+R  变为......
  • 前端学习-JavaScrip学习-js基础02
    学习教程:黑马程序员视频链接运算符自增运算符leti=1;console.log(i+++1);//输出2,i=2leti=1;console.log(++i+1);//输出3,i=2比较运算符开发中,判断相等,推荐用===比较小数会有精度问题逻辑运算符优先级:非>与>或练习01<!DOCTYPEhtml><htmllang="en"><he......