java学习之Object类

java学习之Object类

  • 1. Object类的基本定义
  • 2. public String toString()方法
  • 3. public boolean equals(Object obj)方法
  • 4. Object类可以接收一切引用数据类型
  • 5. clone()方法
  • 6. finalize()方法

1. Object类的基本定义

  1. Object类是所有类的父类。也就是说任何一个类在定义时如果没有明确的继承一个父类,那么它就是Object类的子类。

  2. java中的所有类都有父类,即整个java里面类的继承关系一直都存在(除Object类外)。

  3. Object类是所有类的父类,最大的好处是:利用Object类可以接收全部类的对象,因为可以向上自动转型。

  4. 在不确定参数类型时,使用Object类应该是最好的选择。

java学习之Object类_第1张图片
问题:为什么要在Object类中定义无参构造方法?

既然Object类是所有类的父类,那么所有类对象实例化的时候,子类构造方法一定要默认调用父类的无参构造

从严格意义上来说,任何一个java类都应该覆写Object类中的以下几个方法:

  • 取得对象信息,public String toString()
  • 对象比较,public boolean equals(Object obj)
  • 取得对象哈希码,public int hashCode()

2. public String toString()方法

  1. 默认情况下,Object类中的toString()为了适应所有对象的输出,只输出对象的编码。
  2. 可以根据实际情况,自己覆写toString()此方法。如下所示:
    java学习之Object类_第2张图片

3. public boolean equals(Object obj)方法

  1. 对象比较在很多开发中都是一定要使用到的核心概念,而在之前使用了一个自定义名的compare()方法作为对象比较方法的名称,但是这个不标准,标准的做法是使用equals()方法完成。

4. Object类可以接收一切引用数据类型

  1. Object类是所有类的父类,所以Object类的对象可以接收所以类的对象,可是除了类的对象之外,Object类连数组和接口对象也都可以接收

  2. 接收数组数据
    java学习之Object类_第3张图片

  3. 除了数组外,接口也同样可以。
    java学习之Object类_第4张图片
    整个程序的参数就统一在了Object类型上。

5. clone()方法

protected Object clone()
                throws CloneNotSupportedException
  1. 浅拷贝

    浅拷贝是指我们拷贝出来的对象内部的引用类型变量和原来对象内部引用类型变量是同一引用(指向同一对象)。但是我们拷贝出来的对象和新对象不是同一对象。

    简单来说,新(拷贝产生)、旧(元对象)对象不同,但是内部如果有引用类型的变量,新、旧对象引用的都是同一引用

  2. 深拷贝

    全部拷贝原对象的内容,包括内存的引用类型也进行拷贝。

  3. java拷贝怎么实现?

    使用clone方法,重写clone方法时必须要实现Cloneable接口。虽然这个接口并没有什么方法,但是必须实现该标志接口。

    如果不实现将会在运行期间抛出CloneNotSupportedException异常。

  4. clone方法默认浅拷贝。

java学习之Object类_第5张图片

详解Java中的clone方法 – 原型模式

6. finalize()方法

protected void finalize()
                 throws Throwable

Java允许在类中定义一个名为finalize()的方法。它的工作原理是:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法。并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。

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

finalize()与C++中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或delete掉),但Java中的finalize的调用具有不确定性。

不建议用finalize方法完成“非内存资源”的清理工作,但建议用于:① 清理本地对象(通过JNI创建的对象);② 作为确保某些非内存资源(如Socket、文件等)释放的一个补充:在finalize方法中显式调用其他资源释放方法。

finalize()方法详解

面试题:请解释final、finally、finalize的区别。

  • final:关键字,定义不能被继承的类,不能被覆写的方法,不能修改的常量;
  • finally:关键字,异常的同一出口;
  • finalize:方法,Object类提供的方法,protected void finalize() throws Throwable指的是对象回收之前的收尾方法,即使出现了异常也不会导致程序中断运行。

你可能感兴趣的:(Java学习)