对Object类的理解

来源:互联网 发布:已经备案未注册域名 编辑:程序博客网 时间:2024/05/18 01:50

native是java语言的一个关键字。使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用JDK的源代码中并不包含这些函数的实现体。实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的.

 

    //这个方法是用来注册native方法的,它的作用是向JNIEnv注册本来中的其他native方法

    private static native void registerNatives();

    static {

        registerNatives();

    }

 

    //返回此Object 的运行时类
    //也是native方法,?是通配符,代表Class对象对应的类,比如MyString类。
    //Java编写的任何类都有一个对应的class对象。比如如果我们编写一个MyString类,那么编译器就会创建一个MyString.class文件,该文件保存了对应于MyString类的Class对象。由于MyString类继承自Object,因此也就继承了下面的这个方法。可以通过调用这个方法获得对应的Class对象。Class对象里面保存了MyString类的信息。后面会仔细总结Class对象的作用。

    public final native Class<?> getClass();


 

    //返回对象的哈希码值

    public native int hashCode();

 

    //指示其他某个对象是否与此对象相等(比较的是对象的内容)

    //有些子类会重写该方法,以使其具有比较对象内容的功能

    //子类在重写该方法的时候,通常会重写hashcode方法
    // 该方法用来判断两个对象是否相等,注意这里默认是判断是否为同一个对象。派生类可以改写该方法,转而判断两个不同的对象值是否相等。


    public boolean equals(Object obj) {

           return (this == obj);

    }

 

    //创建并返回此对象的一个副本

    //这个方法被定义为protected,子类如使用该方法必须重载此方法


    protected native Object clone() throws CloneNotSupportedException;

 

    //返回该对象的字符串表示   类名@对象哈希码的无符号十六进制

    public String toString() {

           return getClass().getName() + "@" + Integer.toHexString(hashCode());

    }

 

    //唤醒在此对象监视器上等待的单个线程

    public final native void notify();

 

    //唤醒在此对象监视器上等待的所有线程

    public final native void notifyAll();

 

    //在其他线程调用此对象的notify()方法或notifyAll()方法,或者超过指定的时间量前,导致当前线程等待

    public final native void wait(long timeout) throws InterruptedException;

 

    //在其他线程调用此对象的notify()方法或notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待

    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);

    }

 

    //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待

    public final void wait() throws InterruptedException {

       wait(0);

    }

 

    //对象的垃圾回收器调用此方法

    protected void finalize() throws Throwable { }
 

原创粉丝点击