Java基础详解之基类Object篇

对Java有一定了解的人都知道,Object是Java中所有类的基类,位于类包java.lang下,即使不在类中声明父类,也默认继承了Object类,当然基本数据类型除外,因为那已经不属于类的范畴了。

建议想对Java做深入了解的同学们首先把Object了解清楚,下面详细介绍一下Object的内部方法:

  • protected native Object clone() throws CloneNotSupportedException 本方法用于创建一个当前对象的副本,并返回。但本方法是protected的,只能在类内部或子类里调用,外部无法访问,如果想对外提供对象拷贝的方法的话需要满足下面两个条件:
    1. 被拷贝对象的类需要实现Cloneable接口,否则会抛出CloneNotSupportedException异常
    2. 重写clone方法或新建一个拷贝方法为公开类型public,然后再内部调用super.clone()进行拷贝操作
    示例:
    ?
    1
    2
    3
    4
    5
    public class User implements Cloneable {
        public User clone() throws CloneNotSupportedException {
            return (User) super .clone();
        }
    }
  • public boolean equals(Object obj) 本方法用于判断两个对象是否“相等”,至于“相等”的意义可由用户通过重写该方法得形式自行定义。 默认该方法的实现为判断this==obj是否成立,也就是判断两个对象的内存地址是否一致。 以下为用户自定义形式的示例,判断两个User对象假如id的值相等则就返回true:
    ?
    1
    2
    3
    4
    5
    6
    public class User {
        private Integer id;
        public boolean equals(User user) {
            return ( this .id.equals(user.getId()));
        }
    }
  • public final native Class<?> getClass()
    本方法用于返回当前对象所属类的类对象,并且要注意,这个返回的对象实际上就是这个类中static synchronized方法所用的同步锁对象。 注意:声明变量使用这个返回值的时候尽量要加上泛型,不然调用Class.newInstance()方法生成对象的时候还要强制转换类型为你想要的类型,示例如下:
    1. 使用方式正常应该为:
      ?
      1
      2
      Class<? extends ObjectTest> d = new ObjectTest().getClass();
      ObjectTest t = d.newInstance();
    2. 需要强制转化的情况:
      ?
      1
      2
      Class d = new ObjectTest().getClass();
      ObjectTest t = (ObjectTest) d.newInstance();
  • public native int hashCode()
    本方法返回当前对象的哈希码值,通常这个值就是这个对象的内存地址,原则如下:
    1. 同一对象多次调用返回相同的结果
    2. 当equals方法没有被重写的时候,两个对象equals返回成功,那他们的hashCode也是相同的
  • public final native void notify() 本方法主要用于多线程同步,在已经获得同步对象锁的时候调用本方法将唤醒等待(调用了wait())该对象的一个线程,本篇不做详细介绍,详见:Java基础详解之线程篇
  • public final native void notifyAll() 本方法主要用于多线程同步,在已经获得同步对象锁的时候调用本方法将唤醒等待(调用了wait())该对象的所有线程,本篇不做详细介绍,详见:Java基础详解之线程篇
  • public String toString() 本方法主要用于以字符串的形式返回一个对象的某些信息,默认的实现很简单,就是类名+@+哈希码,源码为::
    ?
    1
    2
    3
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
  • public final void wait() throws InterruptedException 本方法主要用于多线程同步,开始等待对象锁,本篇不做详细介绍,详见:Java基础详解之线程篇
  • public final native void wait(long timeout) throws InterruptedException 本方法主要用于多线程同步,开始等待对象锁,与上个方法不同本方法有个参数为超时时间(毫秒),超时后不再继续等待,本篇不做详细介绍,详见:Java基础详解之线程
  • public final void wait(long timeout, int nanos) throws InterruptedException 本方法主要用于多线程同步,开始等待对象锁,与上个方法不同本方法有个参数为超时时间(毫秒+微秒),超时后不再继续等待,本篇不做详细介绍,详见:Java基础详解之线程篇

你可能感兴趣的:(java基础)