1. registerNatives
通常,为了让JVMfind你的本地函数,它们必须以某种方式命名。 例如,对于java.lang.Object.registerNatives ,相应的C函数被命名为Java_java_lang_Object_registerNatives 。 通过使用registerNatives (或者说JNI函数RegisterNatives ),你可以任意命名你的C函数。
2.native
native是与C++联合开发的时候用的!使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。 这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对 *** 作系统的访问的。总而言之:
native 是用做java 和其他语言(如c++)进行协作时使用的,也就是native 后的函数的实现不是用java写的。
原文链接:https://blog.csdn.net/flyingdog123/article/details/80419911
private static native void registerNatives(); static { registerNatives(); }
3.getClass()
Object getClass() 方法用于获取对象的运行时对象的类。
public final native Class> getClass();
4.hashCode()
hashCode()方法用于返回字符串的哈希码
public native int hashCode();
5.equals()
public boolean equals(Object obj) { return (this == obj); }
6.clone()
常见的Object a=new Object();Object b;b=a;这种形式的代码复制的是引用,即对象在内存中的地址,a和b对象仍然指向了同一个对象。而通过clone方法赋值的对象跟原来的对象时同时独立存在的。详细见以下博客。
JAVA 中的的clone()详解_大鱼的翅膀-CSDN博客
protected native Object clone() throws CloneNotSupportedException;
7.toString()
toString() 方法用于返回以一个字符串表示的 Number 对象值。
如果方法使用了原生的数据类型作为参数,返回原生数据类型的 String 对象值。
如果方法有两个参数, 返回用第二个参数指定基数表示的第一个参数的字符串表示形式。
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
8.notify()
Object notify() 方法用于唤醒一个在此对象监视器上等待的线程。
如果所有的线程都在此对象上等待,那么只会选择一个线程,选择是任意性的,并在对实现做出决定时发生。
一个线程在对象监视器上等待可以调用 wait() 方法。
notify() 方法只能被作为此对象监视器的所有者的线程来调用。
一个线程要想成为对象监视器的所有者,可以使用以下 3 种方法:
- 执行对象的同步实例方法
- 使用 synchronized 内置锁
- 对于 Class 类型的对象,执行同步静态方法
一次只能有一个线程拥有对象的监视器。
如果当前线程不是此对象监视器的所有者的话会抛出 IllegalMonitorStateException 异常。
线程学习:Java线程详解(深度好文)_yjsz2010的专栏-CSDN博客_java线程
public final native void notify();
9. notifyAll()
bject notifyAll() 方法用于唤醒在该对象上等待的所有线程。
notifyAll() 方法跟 notify() 方法一样,区别在于 notifyAll() 方法唤醒在此对象监视器上等待的所有线程,notify() 方法是一个线程。
如果当前线程不是对象监视器的所有者,那么调用 notifyAll() 方法同样会发生 IllegalMonitorStateException 异常。
public final native void notifyAll();
10.wait(long timeout)
Object wait(long timeout) 方法让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数 timeout 设置的超时时间。
如果 timeout 参数为 0,则不会超时,会一直进行等待,类似于 wait() 方法。
public final native void wait(long timeout) throws InterruptedException;
11. wait(long timeout, int nanos)
Object wait(long timeout, int nanos) 方法让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数 timeout 与 nanos 设置的超时时间。
该方法与 wait(long timeout) 方法类似,多了一个 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 纳秒。
如果 timeout 与 nanos 参数都为 0,则不会超时,会一直进行等待,类似于 wait() 方法。
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); }
12.wait()
Object wait() 方法让当前线程进入等待状态。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
当前线程必须是此对象的监视器所有者,否则还是会发生 IllegalMonitorStateException 异常。
如果当前线程在等待之前或在等待时被任何线程中断,则会抛出 InterruptedException 异常。
public final void wait() throws InterruptedException { wait(0); }
13.finalize()
Object finalize() 方法用于实例被垃圾回收器回收的时触发的 *** 作。
当 GC (垃圾回收器) 确定不存在对该对象的有更多引用时,对象的垃圾回收器就会调用这个方法。
protected void finalize() throws Throwable { }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)