继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Object类中的方法

不要慕码人我要切诺基
关注TA
已关注
手记 281
粉丝 37
获赞 120

方法一 Object() 即Object的构造方法

    Java中规定,每个类都有一个默认的无参构造器,此方法也就是用来体现这一特性

方法二 registerNatives

    该方法API中并没有写,但类中是存在的,是一个native方法。

private static native void registerNatives();    static {        registerNatives();    }

可以望文生义,注册natives,即注册native方法,也就是说通过该方法我们可以在java中通过一定的命名规则去连接调用

其它语言类型的代码,同理,如果你是在C程序中嵌入Java并且想要这个程序本身内的链接到这个函数,注册本地函数也是

有用的,因为这些通常不会通过标准方法查找机制被发现。

方法三 clone

  protected native Object clone() throws CloneNotSupportedException;

它的作用是克隆出一个一模一样的对象,克隆出的对象与原来的对象保存的地址是不一样的,是一个全新的对象。能调用

此方法的类必须实现Cloneable接口,否则会抛出不支持异常,该接口在此处只有一个标识的作用,标识该类可以被克隆,

与Servlizable类似。。

方法4 getClass()

public final native Class<?> getClass();

我们知道所有类都具有父类、属性、构造器、方法等信息,java中又专门定义了另一个类Class,用来描述类的这些信息,

也就是说任何的类都对应一个Class对象用来保存自身的类信息,我们可以通过获取Class对象操作类的这些信息,这与java

中的一大特性反射,息息相关。。

方法5 equals

public boolean equals(Object obj) {        return (this == obj);    }

明显equals方法在这里与==语义一样,有时候子类需要去重写这个方法时,需要注意相应的要重写hashCode()方法,这样才能

保证equals()返回true,hashCode()也必须返回true的规范。

方法6 hashCode();

public native int hashCode();

在Java应用程序程序执行期间,对于同一对象多次调用hashCode()方法时,其返回的哈希码是相同的,前提是将对象进行equals比较

时所用的标尺信息未做修改。在Java应用程序的一次执行到另外一次执行,同一对象的hashCode()返回的哈希码无须保持一致;

如果两个对象相等(依据:调用equals()方法),那么这两个对象调用hashCode()返回的哈希码也必须相等;

反之,两个对象调用hasCode()返回的哈希码相等,这两个对象不一定相等。方法7 toString();

方法7 toString();

public String toString() {          return getClass().getName() + "@" + Integer.toHexString(hashCode());      }

作用是返回一个对象的字符串表示,toString()是由对象的类型和其哈希码唯一确定,同一类型但不相等的两个对象分别调用toString()

方法返回的结果可能相同。

方法8、9、10、11、12接下来,wait(...) / notify() / notifyAll()方法

public final void wait() throws InterruptedException {        wait(0);    }        public final void wait(long timeout, int nanos) throws InterruptedException {        if (timeout < 0) {            throw new IllegalArgumentException("timeout value is negative");        }        if (nanos < 0 || nanos > 999999) {            throw new IllegalArgumentException(                                "nanosecond timeout value out of range");        }        if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {            timeout++;        }        wait(timeout);    }        public final native void wait(long timeout) throws InterruptedException;

调用wait方法表示该线程释放锁释放CPU执行资格,等待被唤醒,它的重载方法传入了时间函数,指的是,被wait之后

等待被唤醒或者wait时间超时。

 public final native void notify();

唤醒调用该方法的线程

 public final native void notifyAll();

唤醒所有等待的线程。

方法13 finalize();

protected void finalize() throws Throwable { }

我们发现Object类中finalize方法被定义成一个空方法,为什么要如此定义呢?finalize方法的调用时机是怎么样的呢?

首先,Object中定义finalize方法表明Java中每一个对象都将具有finalize这种行为,其具体调用时机在:JVM准备对此对形象

所占用的内存空间进行垃圾回收前,将被调用。由此可以看出,此方法并不是由我们主动去调用的(虽然可以主动去调用,此

时与其他自定义方法无异)。



打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP