Object类 11种方法

  • 1概述
  • 1 toString⽅法
  • 2 hashCode()
  • 3 equals⽅法
  • 4 Class getClass()
  • 5 Object clone()-克隆
  • 6 void finalize() -Gc垃圾回收机制
  • 7.wait(long timeout)
  • 8.wait(long timeout, int nanos)
  • 9.wait()
  • 10.notify()
  • 11.notifyAll()

1概述

java.lang.Object 类是Java语⾔中的根类,即所有类的⽗类。
Object类当中包含的⽅法有11个:

1.需要重写 toString(),equals(),hashCe();
2.线程有关wait(),notify(), notifyAll();
3.其他 getClass(),finalize(),clone();

如果⼀个类没有特别指定⽗类,那么默认则继承⾃Object类。例如:

public class MyClass /extends Object/ { // … }

1 toString⽅法

⽅法摘要
public String toSting():返回该对象的字符串表示
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值
覆盖重写
如果不希望使⽤toString⽅法的默认⾏为,则可以对它进⾏覆盖重写。例如⾃定义的Person类:

public class Person { private String name;private int age;@Overridepublic String toString() {return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';}// 省略构造器与Getter Setter
}

在IntelliJ IDEA中,可以点击 Code 菜单中的 Generate… ,也可以使⽤快捷键 alt+insert ,点
击 toString() 选项。选择需要包含的成员变量并确定。如下图所示

2 hashCode()

native方法,用于返回对象的哈希吗,主要使用在哈希表中,比如jdk中的 HashMap

3 equals⽅法

⽅法摘要
public boolean equals(Object obj) :指示其他某个对象是否与此对象“相等”。
调⽤成员⽅法equals并指定参数为另⼀个对象,则可以判断这两个对象是否是相同的。这⾥的“相 同”有默认和⾃定义两种⽅式。
1.默认地址⽐较
如果没有重写equals方法,那么Object类中默认进行**==**运算符 的对象地址比较,只要不是同一个对象,结果必然是false.
2.对象内容⽐较
如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可覆盖重写equals方法。例如:

import java.util.Objects;
public class Person {private String name;private int age;@Overridepublic boolean equals(Object o) {// 如果对象地址⼀样,则认为相同if (this == o)return true;// 如果参数为空,或者类型信息不⼀样,则认为不同if (o == null || getClass() != o.getClass())return false;// 转换为当前类型Person person = (Person) o;// 要求基本类型相等,并且将引⽤类型交给java.util.Objects类的equals静态⽅
法取⽤结果return age == person.age && Objects.equals(name, person.name);}
}

在IntelliJ IDEA中,可以使⽤ Code 菜单中的 Generate… 选项,也可
以使⽤快捷键 alt+insert ,并选择 equals() and hashCode() 进⾏⾃动代码⽣成。如下图所


在⽐较两个对象的时候,Object的equals⽅法容易抛出空指针异常,⽽Objects类中的equals⽅
法就优化了这个问题。⽅法如下:

public static boolean equals(Object a, Object b) :判断两个对象是否相等

public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b));
}

4 Class getClass()

public final Class<?> getClass()
返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
Java的引用变量有两个类型,编译时类型和运行时类型。
1.编译时类型由声明该变量时使用的类型决定。(=左边)
2.运行时类型由实际赋给该变量的对象决定。(=右边)

object.作用:对象通过该方法,可以获得对应的类的字节码对象
xx.java ->xx.class ->JVM
类加载-方法区-字节码对象
加载:类只加载一次,所以方法区中类型信息只有一个,对应的字节码对象都是同一个。
加载触发的条件:
1.实例化对象 new
2.静态方法/静态变量
3.使用子类,父类必须先加载
4.class.forName(“java.lang.Sting”)–手动加载指定的类
5.Strin.class->获得字节码对象

举例
定义student类:

public class Student {String name;int age;public Student(String name, int age) {this.name = name;this.age = age;}public Student() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}
}

主方法实现

public class Demo {public static void main(String[] args) throws Throwable {System.out.println("------Class getClass()----");Student stu1 = new Student("qw", 12);Student stu2 = new Student("ae", 12);Class aClass = stu1.getClass();Class aClass1 = stu2.getClass();//同种类型的对象,对应的字节码对象都是同一个System.out.println(aClass==aClass1);//true

5 Object clone()-克隆

深克隆:复制对象 是复制一份全新的,属性内容一致的对象,但内存中的地址值一定不一样
浅克隆:复制引用

定义Clone类

 public class Clone {String name;int age;public Clone(String name, int age) {this.name = name;this.age = age;}public Clone() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

子克隆类:

public class ZiClone extends Clone implements Cloneable{@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}

主方法实现

public class Demo {public static void main(String[] args) throws Throwable {ZiClone zi = new ZiClone();/*深克隆复制是对象 */zi.setName("lucy");Object clone= zi.clone();//多态ZiClone clone1=(ZiClone)clone;//==对比是时地址值System.out.println(zi==clone1);//false//复制出来的在堆中的内存位置不一样/*浅克隆  复制引用*/ ZiClone  clone2=zi;System.out.println(zi==clone2);//true
}
}

6 void finalize() -Gc垃圾回收机制

内存溢出:在内存中没有存储的地方
内存泄漏:内存被无效对象占用
一个对象分配内存之后,在使用是没有来得释放,导致一直在占用内存,使得实际内存变少
GC 垃圾回收机制,定时清理内存
1.在程序运行时自动启动,不定时回收内存中标记的垃圾(没有引用的对象,会被内存标记为垃圾)
2.GC是自动调用的,也可以手动调用GC -System.gc();
总结:原则上java中是不存在内存泄漏的

7.wait(long timeout)

native 方法,并且不能重写。
作用是:暂停线程的执行。
注意:sleep() 方法没有释放锁,wait释放了锁。timeout 是等待时间。

8.wait(long timeout, int nanos)

比上者多了 nanos参数,表示额外的时间(以毫秒为单位,范围是 0 - 999999)

9.wait()

跟上面两个一样,只不过该方法会一直等下去,没有超时这个概念

10.notify()

native方法,并且不能重写。
唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)
如果有多个线程在等待只会唤醒一个。

11.notifyAll()

native方法,并且不能重写。
作用跟 notify() 一样,只不过会唤醒在此对象监视器上等待的所有线程,而不是一个线程。

Object类11种方法相关推荐

  1. JavaSE学习总结(八)常用类(上)Object类==与equals方法的区别浅克隆的特点Scanner类String类String两种创建对象方式的区别String类的各种功能

    JavaSE学习总结(八)常用类(上)/Object类/==与equals方法的区别/浅克隆的特点/Scanner类/String类/String两种创建对象方式的区别/String类的各种功能 常用 ...

  2. Object类中有哪些方法

    2019独角兽企业重金招聘Python工程师标准>>> Object类中的方法介绍 类Object是类层次结构的根类,每一个类都使用Object作为超类,所有对象(包括数组)都实现这 ...

  3. [ 转载 ] Java基础10--关于Object类下所有方法的简单解析

    关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...

  4. 《Java 核心技术卷1 第10版》学习笔记------Object类的 equals 方法

    Object 简述 Object 类是 Java 中所有类的始祖, 在 Java 中每个类都是由它扩展而来的. 在 Java 中, 只有基本类型 ( primitive types) 不是对象, 例如 ...

  5. Java基础知识强化26:Object类之hashCode()方法、getClass()方法

    1. Object类的hashCode()方法,如下: public  int  hashCode():返回该对象的哈希码值,这个值和地址值有关,但是不是实际地址值(哈希码值是根据实际地址值转化过来的 ...

  6. Java面试题:final和Object类常见的方法

    final 关键字的理解 final关键字主要用在三个地方:变量.方法.类. 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改:如果是引用类型的变量,则在对其初始化之 ...

  7. Object类的各个方法及其作用

    Object类的各个方法及其作用 一.简介Object类 ​ 1.Object类是所有类的父类,即每个类都直接或简介继承自该类.所以一个Object类型的变量可以引用任何对象,不论是类实例还是数组. ...

  8. Object类中的方法

    基本描述: (1)Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: (2)Object类是所有Java类的祖先.每个类都使用 Obje ...

  9. Object类九大方法之finalize方法

    Object类九大方法之finalize方法 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法. finalize的作用 ...

最新文章

  1. hung-yi lee_p5-7_Gradient Descent(梯度下降)
  2. Postman 最被低估的功能
  3. 各种图(流程图,思维导图,UML,拓扑图,ER图)简介
  4. matlab在振动信号处理中的应用_Matlab面向对象程序设计及其在地球物理学中的应用(4)——类的属性
  5. P3768 简单的数学题 [狄利克雷卷积,杜教筛,莫比乌斯反演]
  6. 从Excel文件中找出在TXT文件中没有出现的 行之_代码片段
  7. 计算机等待程序关闭,教您win10系统关闭计算机弹出“等待后台程序关闭”无法关机的技巧...
  8. Kotlin入门(4)声明与操作数组
  9. 不仅仅于 Json和XML ,快来学习Google出品的序列化神器Protocol Buffer
  10. Mac下MySQL卸载方法
  11. 盗链 防止盗链 防止图片盗链
  12. ant 发布web应用脚本
  13. 干货合辑!Ms08067安全实验室2020年度盘点
  14. 区块链开发完整指南。如何开发一款区块链项目?
  15. 读书笔记-大型网站技术架构:核心原理与案例分析
  16. 世界互联网大会马云演讲实录
  17. 淡泊明志,宁静致远。「学会做人的涵养」 - Qzone日志
  18. python+gdal+numpy计算ndvi
  19. 软件工程领域CCF B类会议:SANER介绍(以SANER 2019为例)
  20. 计算机协会ppt介绍,计算机协会成功举办ppt大赛

热门文章

  1. 京东数据挖掘工程师常用的 10多个 pandas 函数
  2. 投票的链接怎么做出来的网上那些投票链接怎么做的网上投票器
  3. 银河麒麟(Kylin)系统Ghost镜像文件(.kyimg)系统还原方法
  4. python修改yaml文件内容_Python操作Yaml文件
  5. Snowflake数据库调研及架构介绍
  6. Column generation
  7. 程序猿必备的高逼格午饭玩具
  8. 手游最强搭档低延迟蓝牙耳机,五款时尚真无线蓝牙耳机推荐
  9. android 选择图片sdk,GitHub - XieZed/CameraSDK: Android多图选取,滤镜,贴纸,裁剪等类似美图秀秀的功能...
  10. win oracle trc文件怎么打开,trc文件打开工具