标签:
分别是如下的:
1)public final native Class<?> getClass();
2)public native int hashCode();
3)public boolean equals(Object obj) {return (this == obj);}
4)protected native Object clone() throws CloneNotSupportedException;
5)public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
6)public final native void notify();
7)public final native void notifyAll();
8)protected void finalize() throws Throwable { }
9)public final native void wait(long timeout) throws InterruptedException;
// wait方法重载有三个,但是真正意义上只有一个有用,有用这个也都是内部实现native
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); }
1、public final native Class<?> getClass();
获取对象的类全称,也就是:class package.class
2、public native int hashCode();
返回的是当前对象的内存地址。无论何时,对同一个对象调用hashCode()都应该生成同样的值,不管这个对象是否发生过内部改变。
3、public boolean equals(Object obj) {return (this == obj);}
通过内存地址判断对象是否相等。
4、protected native Object clone() throws CloneNotSupportedException;
对象克隆,这个是深度克隆时的必须实现的方法,同时一般都会调用object的clone方法;
5、public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
返回类名+@+地址的16进制数
6、public final native void notify();
线程唤醒
7、 public final native void notifyAll();
线程唤醒
8、protected void finalize() throws Throwable { }
垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法,一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们要实现特殊的功能。
9、public final native void wait(long timeout) throws InterruptedException;
线程阻塞,等待一定时间
10、关于equals与hashCode
一般只要重写二者之一,你们另一个也有必要要重写,但是不是强求的。原因是equals方法使用的是内存地址比较,同样hashCode返回的也是内存地址,那么如果采用equals相等,然而hashCode相等的确是说不通的,应该是equals为true,那么hashCode的值一定相同;反之不成立。另外,使用方面一个很大的因素就是Map的key,因为我们知道Map的key代码:
public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; }
首先比较的是HashCode,其次比较的才是equals,如果你只是对equals重写,没有重写hashCode,应该是不会拿到预期后果的。
标签:
原文地址:http://my.oschina.net/heweipo/blog/489045