Object类方法分析

Object类
Object类有12个成员方法
1,构造函数 
2,clone()
3,hashCode和equale函数用来判断对象是否相同, 
4,toString()和getClass, 
5,wait(),wait(long),wait(long,int),notify(),notifyAll() 
6,finalize()用于在垃圾回收
clone()
clone()函数的用途是用来另存一个当前存在的对象。
hashCode()和equale()
  • equale()用于确认两个对象是否相同。
  • hashCode()用于获取对象的哈希值,这个值的作用是检索
  • 哈希值相同的对象不一定equale()
  • equale()返回true的两个对象一定相同。
toString()和getClass()
toString()返回一个String对象,用来标识自己 
getClass()返回一个Class对象,如果打印出来会发现结果是如下格式
class package.name.xxx
因为返回的是一个class对象,后面可以跟class类的方法。用的是谁的构造函数,那么getClass返回的就是谁的类型。  getClass()经常用于java反射机制
wait(),wait(long),wait(long,int),notify(),notifyAll()
  • 这几个函数体现的是Java的多线程机制
  • 在使用的时候要求在synchronize语句中使用
  • wait()用于让当前线程失去操作权限,当前线程进入等待序列
  • notify()用于随机通知一个持有对象的锁的线程获取操作权限
  • notifyAll()用于通知所有持有对象的锁的线程获取操作权限
  • wait(long) 和wait(long,int)用于设定下一次获取锁的距离当前释放锁的时间间隔
finalize()
这个函数在进行垃圾回收的时候会用到,匿名对象回收之前会调用到。

附上一段JVM中关于finalize方法的背景。

源码:
private static native void registerNatives() ;
static {
registerNatives ();
}
public final native Class<?> getClass() ;
public native int hashCode();
public boolean equals(Object obj) {
return ( this == obj);
}
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();
public final native void wait(long timeout) throws InterruptedException;
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 > 0 ) {
timeout++;
}
wait(timeout);
}
public final void wait() throws InterruptedException {
wait( 0 );
}
protected void finalize() throws Throwable { }

  native关键字
     native关键字说明其 修饰的方法是一个原生态方法 ,方法对应的 实现不是在当前文件,而是在用其他语言(如C和C++)实现 的文件中。 Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。
    JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(Java Software Development Kit,SDK)的一部分。JNI允许Java代码使用以其他语言编写的代码和代码库。Invocation API(JNI的一部分)可以用来将Java虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用Java代码。

声明native方法:如果你想 将一个方法做为一个本地方法(在JVM本地方法栈中存)的话,那么你就必须声明改方法为native的,并且不能实现 。其中方法的参数和返回值在后面讲述。

   Load动态库 :System.loadLibrary("hello");加载动态库(我们可以这样理解:我们的方法hello()没有实现,但是我们在下面就直接使用了,所以必须在使用之前对它进行初始化)这里一般是以static块进行加载的。同时需要注意的是System.loadLibrary();的参数“hello”是动态库的名字。
第一步编写java类,第二步编译生成.h文件,第三步用c语言实现具体代码

   b.编译
    javac HelloWorld.java
    c.生成.h文件
    javah -jni HelloWorld
    生成内容如下:
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class HelloWorld */
    #ifndef _Included_HelloWorld
    #define _Included_HelloWorld
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     HelloWorld
     * Method:    hello
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_HelloWorld_hello
      (JNIEnv *, jobject);
    #ifdef __cplusplus
    }
    #endif
    #endif
    第一个参数是调用JNI方法时使用的JNI Environment指针。第二个参数是指向在此Java代码中实例化的Java对象HelloWorld的一个句柄。其他参数是方法本身的参数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值