JAVA基础(1)---Object类方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36252044/article/details/86654845

Java中 Object类是所有类的父类, 它提供了以下11个方法:

  1. public final native Class<?> getClass()
  2. public native int hashCode()
  3. public boolean equals(Object obj)
  4. protected native Object clone()throws CloneNotSupportedException
  5. public String toString()
  6. public final native void notify()
  7. public final native void notifyall()
  8. public final native void wait(long timeout)throws InterruptedException
  9. public final void wait(long timeout, int nanos)throws InterruptedException
  10. public final void wait()throws InterruptedException
  11. protected void finalize()throws Throwable{}

一. getClass 方法


  • native 方法表示java调用非java接口的方法,表示需要和机器进行交互,那就需要调用C的代码

  • getClass方法是一个final方法,不允许子类重写,也是一个native方法.

  • 返回当前运行时对象的Class对象 ,注意是运行时.
    eg:
    “str”.getClass() // class java.lang.String
    “str”.getClass() == String.class //true
    Number n = 0;
    Class<? extends Number> c = n.getClass(); //class java.lang.Integer
    因为java中数值默认是Integer类型,

二. hashCode 方法


  • hashCode返回的是对象的哈希码,主要使用在哈希表中

  • 哈希码的通用约定如下

    (1)java程序执行的过程中,如果一个对象在没有被改变的前提下,无论调用多少次该对象的hashCode,返回的都是相同的哈希值.
    相同对象没有必要在不同的程序中保持一样的哈希值.

    (2)如果两个对象使用equals方法进行比较相等的话,那么这两个对象的hashCode返回的值也必须相等.

    (3)如果两个对象使用equals比较不相等的话,那么这两个对象的hashCode值也不需要相等.但是两个不相等的对象哈希值不相等的话有利于提高哈希表的性能

三. equals 方法


  • 即比较2个对象的内存地址是否相等

  • 如果重写了equals方法,通常必须要重写hashCode方法.

四.clone 方法


  • clone方法是一个protected的native方法

  • 创建并返回当前对象的一份拷贝

  • 由于Object方法本身没有实现Cloneable接口, 所以不重写clone方法并调用的话会抛
    CloneNotSupportedException异常

五. toString 方法


  • Object类的默认实现,输出 类的名字@实例的哈希码的16进制

六.notify 方法


  • 一个final的native方法, 不允许子类重写.

  • 唤醒一个在此对象监视器(相当于锁的概念)上等待的线程.

  • notify方法只能被作为此对象监视器的所有者的线程来调用,如果一个线程要成为对象监视器的所有者,可以使用以下3种方法

    (1)执行对象的同步实例方法

    (2)使用synchronized内置锁

    (3)对于Class类型的对象,执行同步静态的方法

    ps: 一次只能有一个线程拥有对象的监视器

  • notify方法只能在拥有对象监视器的线程中调用,否则会抛异常 IllegalMonitorStateException

七.notifyall 方法


  • 与notify唯一不同的是唤醒在此对象监视器上的所有线程

八.wait(long timeout) throws InterruptedException方法


  • 一个final的native方法, 不允许子类重写.

  • wait方法会让当前线程等待知道另外一个线程调用notify或notifyall方法,或者超过参数设置的timeout时间超时

  • 当前线程必须是此对象的监视器所有者,否则还是会报异常

九. wait(long timeout, int nanos) throws InterruptedException方法


  • 跟wait(long timeout)方法类似,多了一个nanos参数,这个参数表示额外时间(以毫微秒为单位,范围是 0-999999)

十.wait() throws InterruptedException方法


  • 调用wait方法需要当前线程是对象监视器的所有者.

  • 一般情况下,wait方法和notify方法会一起使用的,wait方法阻塞当前线程,notify方法唤醒当前线程.

十一. finalize方法


  • finalize方法是一个protected方法,Object类的默认实现是不进行任何操作。

  • 该方法的作用是实例被垃圾回收器回收的时候触发的操作

猜你喜欢

转载自blog.csdn.net/qq_36252044/article/details/86654845
今日推荐