Object类介绍

  Object类是所有类、数组、枚举的父类,当我们定义一个类未使用extends关键字去显示指定父类时,则表示该类默认继承了Object父类。

Object类常用方法

  1. boolean equals(Object obj):判断两个对象是否为同一个对象;
  2. protected void finalize():JVM的垃圾回收GC器可以使用来清理对象(无引用变量应用该对象,具体可查看JVM中可达性分析等算法)
  3. Class<?> getClass():返回该对象的运行时类;
  4. String toString():返回对象的字符串表示输出;Object类的toString()方法返回的值为“运行时类名@十六进制的hashCode值”;
  5. int hashCode():返回对象的hashCode值;
  6. wait():导致当前线程处于等待状态,直至其他线程调用该同步监听器的notify()或者notifyAll()方法唤醒它。调用wait()方法的当前线程会释放对该同步监视器的锁定。wait()方法有三种形式:无时间参数、带毫秒参数的和带毫秒、毫微秒参数的。第一种是一直等待,直到其他线程通知;第二、三种是等待指定时间后自动醒来。
  7. notify():唤醒在该同步监视器上等待的单个线程,若所有线程都在这个同步监视器上等待,就会任意选择其中一个线程进行唤醒。只有当前线程释放该同步监视器的锁定后,才能执行被唤醒的线程。
  8. notifyAll():唤醒在该同步监视器上等待的所有线程;只有当前线程释放该同步监视器的锁定后,才能执行被唤醒的线程。
  9. protected clone():拷贝、克隆对象,得到一个当前对象的副本,属于浅复制,只会拷贝对象的成员变量,如果拷贝的对象内部还有对象,则不会进行拷贝。如果想实现对象中的引用变量(对象中的对象)则需要实现“递归”拷贝/克隆(深拷贝),继续对下一级对象进行拷贝。

:上述提到的同步监视器是指synchronized等关键字修饰的同步方法,则同步监视器即为该类的默认实例(this);或者是synchronized修饰的同步代码块,此时同步监视器即为synchronized后面括号中的对象。

自定义拷贝/克隆

  既然提到clone()方法,有必要提一下如何实现自定义类的拷贝/克隆。

自定义clone实现步骤

  1. 自定义类实现Cloneable接口;
  2. 自定义类实现自己的clone()方法;
  3. clone()方法中需要有super.clone()来调用Object类实现的clone()方法去获取该对象的副本,并返回该副本。

自定义clone()的示例

二级对象:

public class PersonInformation {String address;int telephoneNumber;public PersonInformation(String address, int telephoneNumber) {this.address = address;this.telephoneNumber = telephoneNumber;}
}

一级对象:

public class Person implements Cloneable {String name;int age;PersonInformation personInfo;public Person(String name, int age) {this.name = name;this.age = age;personInfo = new PersonInformation("江苏-南京", 188xx11xx22)}// 实现clone()方法public Person clone() throws CloneNotSupportedException{return (Person)super.clone();}
}

测试:

public class CloneTest {public static void main(String[] args) throws CloneNotSupportedException {Person person1 = new Person("小红", 20);// clone拷贝得到person1的对象副本Person person2 = person1.clone();//判断两个对象是否相等;System.out.println(person1 == person2);// 判断两个对象中的引用变量是否相等;System.out.prinln(person1.personInfo == person2.personInfo);}
}

结果:

true
false

Java—Object类及自定义克隆详解相关推荐

  1. java 对象重写equals方法_Java如何重写object类的equals方法详解

    1.Object类的equals()方法: 比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等.是则返回tru ...

  2. java集合框架史上最详解(list set 以及map)

    title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...

  3. Android Gradle 自定义Task 详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  4. Java集合(四) LinkedList详解

      在上篇文章Java集合(三) ArrayList详解的学习和源码分析中,我们知道ArrayList是以数组实现,它的优势是查询性能高,劣势是按顺序增删性能差.如果在不确定元素数量的情况时,不建议使 ...

  5. java 枚举类型enum的用法详解

    Java Enum原理 public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE }; 实际上,这个声明定义的类型是一个类,它刚好有四个实例,在此尽量不要 ...

  6. 牛客网 Java 工程师能力评估 20 题 - 详解

    牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...

  7. Java自动日志监控框架auto-log详解

    Java自动日志监控框架auto-log详解 1. 需求概述 2. auto-log简介 2.1 auto-log定义 2.2 auto-log目的 2.3 auto-log特性 2.4 注解说明 2 ...

  8. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  9. (7)Java数据结构--集合map,set,list详解

    MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...

最新文章

  1. BCH推出BCH粉丝互动平台
  2. 开发错误记录9:Application无法跳转到Activity
  3. DM8168学习--USB的over-current 问题总结
  4. MySQL数据库:范式
  5. Food Buying CodeForces - 1296B
  6. 年买笔记本的8个小技巧 最适合自己才最好(组图)
  7. 架构设计:负载均衡层设计方案(1)——负载场景和解决方式
  8. python函数详解图_[宜配屋]听图阁
  9. 设计模式之—工厂方法模式
  10. Spark 基础 —— Map 容器
  11. Node JS环境设置– Node.js安装
  12. python源码_Python爬虫入门之获取网页源码
  13. 网络测试工具iperf使用教程
  14. iCode:开源的在线 html/css/js 编辑器
  15. 苹果手机屏幕镜像搜索不到电视_无线同屏器连接电视步骤
  16. ug筋板不能正确覆盖开放轮廓_安徽省六安市第一中学2017届高三上学期第二次月考地理【解析】...
  17. 计算机分区gpt无法启动项,双系统引导失败怎么修复?用bcd编辑MBR/GPT教程
  18. c语言中gets与puts,请教puts和gets函数
  19. kafka-connect-jdbc 增加source报错:query may not be combined with whole-table copying settings
  20. uni-app修改页面背景色

热门文章

  1. Python读写txt
  2. 笨方法“学习python笔记之urlopen
  3. 输出图片任意点的像素坐标(结合IRFANVIEW使用)
  4. 随机抽样一致算法(RANSAC)理论介绍和程序实现
  5. PC端动态视频背景引导页(非自适应)
  6. java 属性访问修饰符_Java中的访问修饰符(二十七)
  7. python中扑克牌类设计_python中的图像界面设计(二)
  8. eclipse服务器添加项目工程,eclipse创建和发布web项目(示例代码)
  9. vue 拖拽(笔记)
  10. 简约易收录的导航网站源码