Object类11种方法
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种方法相关推荐
- JavaSE学习总结(八)常用类(上)Object类==与equals方法的区别浅克隆的特点Scanner类String类String两种创建对象方式的区别String类的各种功能
JavaSE学习总结(八)常用类(上)/Object类/==与equals方法的区别/浅克隆的特点/Scanner类/String类/String两种创建对象方式的区别/String类的各种功能 常用 ...
- Object类中有哪些方法
2019独角兽企业重金招聘Python工程师标准>>> Object类中的方法介绍 类Object是类层次结构的根类,每一个类都使用Object作为超类,所有对象(包括数组)都实现这 ...
- [ 转载 ] Java基础10--关于Object类下所有方法的简单解析
关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...
- 《Java 核心技术卷1 第10版》学习笔记------Object类的 equals 方法
Object 简述 Object 类是 Java 中所有类的始祖, 在 Java 中每个类都是由它扩展而来的. 在 Java 中, 只有基本类型 ( primitive types) 不是对象, 例如 ...
- Java基础知识强化26:Object类之hashCode()方法、getClass()方法
1. Object类的hashCode()方法,如下: public int hashCode():返回该对象的哈希码值,这个值和地址值有关,但是不是实际地址值(哈希码值是根据实际地址值转化过来的 ...
- Java面试题:final和Object类常见的方法
final 关键字的理解 final关键字主要用在三个地方:变量.方法.类. 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改:如果是引用类型的变量,则在对其初始化之 ...
- Object类的各个方法及其作用
Object类的各个方法及其作用 一.简介Object类 1.Object类是所有类的父类,即每个类都直接或简介继承自该类.所以一个Object类型的变量可以引用任何对象,不论是类实例还是数组. ...
- Object类中的方法
基本描述: (1)Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: (2)Object类是所有Java类的祖先.每个类都使用 Obje ...
- Object类九大方法之finalize方法
Object类九大方法之finalize方法 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法. finalize的作用 ...
最新文章
- hung-yi lee_p5-7_Gradient Descent(梯度下降)
- Postman 最被低估的功能
- 各种图(流程图,思维导图,UML,拓扑图,ER图)简介
- matlab在振动信号处理中的应用_Matlab面向对象程序设计及其在地球物理学中的应用(4)——类的属性
- P3768 简单的数学题 [狄利克雷卷积,杜教筛,莫比乌斯反演]
- 从Excel文件中找出在TXT文件中没有出现的 行之_代码片段
- 计算机等待程序关闭,教您win10系统关闭计算机弹出“等待后台程序关闭”无法关机的技巧...
- Kotlin入门(4)声明与操作数组
- 不仅仅于 Json和XML ,快来学习Google出品的序列化神器Protocol Buffer
- Mac下MySQL卸载方法
- 盗链 防止盗链 防止图片盗链
- ant 发布web应用脚本
- 干货合辑!Ms08067安全实验室2020年度盘点
- 区块链开发完整指南。如何开发一款区块链项目?
- 读书笔记-大型网站技术架构:核心原理与案例分析
- 世界互联网大会马云演讲实录
- 淡泊明志,宁静致远。「学会做人的涵养」 - Qzone日志
- python+gdal+numpy计算ndvi
- 软件工程领域CCF B类会议:SANER介绍(以SANER 2019为例)
- 计算机协会ppt介绍,计算机协会成功举办ppt大赛
热门文章
- 京东数据挖掘工程师常用的 10多个 pandas 函数
- 投票的链接怎么做出来的网上那些投票链接怎么做的网上投票器
- 银河麒麟(Kylin)系统Ghost镜像文件(.kyimg)系统还原方法
- python修改yaml文件内容_Python操作Yaml文件
- Snowflake数据库调研及架构介绍
- Column generation
- 程序猿必备的高逼格午饭玩具
- 手游最强搭档低延迟蓝牙耳机,五款时尚真无线蓝牙耳机推荐
- android 选择图片sdk,GitHub - XieZed/CameraSDK: Android多图选取,滤镜,贴纸,裁剪等类似美图秀秀的功能...
- win oracle trc文件怎么打开,trc文件打开工具