Object类解析
转载自:http://ihenu.iteye.com/blog/2233249
1.在Java应用程序的一次执行到另外一次执行,同一对象的hashCode()返回的哈希码无须保持一致;
2.如果两个对象相等(依据:调用equals()方法),那么这两个对象调用hashCode()返回的哈希码也必须相等;(因为就是通过hashcode比较的)
3.严格的数学逻辑表示为: 两个对象相等 <=> equals()相等 => hashCode()相等。因此,重写equlas()方法必须重写hashCode()方法,以保证此逻辑严格成立,同时可以推理出:hasCode()不相等 => equals()不相等 <=> 两个对象不相等。
4.两个对象哈希码值相等,这两个对象不一定相等(obj.2+obj.2=obje.1+obje.3 obj!=obje)
5.理论上任何对象都可以视为线程同步中的监听器,且wait(...)/notify()|notifyAll()方法只能在同步代码块中才能使用。故Object中有这些类.
6.Object类中finalize方法被定义成一个空方法,为什么要如此定义呢?
有时候父类finalize方法里有东西,但是子类把父类方法覆盖了,导致父类方法不会执行,这种怎么解决?
方法1。
方法2. 父类被回收的时候,内部的匿名类也一定被收回,那匿名内部类的finalize方法不管子类怎么搞都不会受影响的。是不是很巧妙。
转载自:http://ihenu.iteye.com/blog/2233249
1.在Java应用程序的一次执行到另外一次执行,同一对象的hashCode()返回的哈希码无须保持一致;
2.如果两个对象相等(依据:调用equals()方法),那么这两个对象调用hashCode()返回的哈希码也必须相等;(因为就是通过hashcode比较的)
3.严格的数学逻辑表示为: 两个对象相等 <=> equals()相等 => hashCode()相等。因此,重写equlas()方法必须重写hashCode()方法,以保证此逻辑严格成立,同时可以推理出:hasCode()不相等 => equals()不相等 <=> 两个对象不相等。
4.两个对象哈希码值相等,这两个对象不一定相等(obj.2+obj.2=obje.1+obje.3 obj!=obje)
5.理论上任何对象都可以视为线程同步中的监听器,且wait(...)/notify()|notifyAll()方法只能在同步代码块中才能使用。故Object中有这些类.
6.Object类中finalize方法被定义成一个空方法,为什么要如此定义呢?
有时候父类finalize方法里有东西,但是子类把父类方法覆盖了,导致父类方法不会执行,这种怎么解决?
方法1。
@Override
protected void finalize() throws Throwable(){
try{
//finalize subclass state
}finally{
super.finalize();
}
}
方法2. 父类被回收的时候,内部的匿名类也一定被收回,那匿名内部类的finalize方法不管子类怎么搞都不会受影响的。是不是很巧妙。
public class Super{
private final Object finalizerGuardian=new Object(){
@Override
protected void finalize() throws Throwable(){
//Super.this.close();
}
}
}