在java中,Object类是所有类的父类,其位于java.lang 包下。从源码中可以看出其定义了13个方法,但是浏览源码后并没有看到显示定义public Object() 构造函数,估计是设计者使用了默认构造函数。
at java.lang.Object.clone(Native Method)这样的一个异常,必须实现Cloneable接口才可以
public native int hashCode();
其 hashCode()方法由native修饰,说明调用了依赖于本地平台的实现并且返回一个整形的量
public boolean equals(Object obj) {
return (this == obj);
}
其equals方法接受Object类型的参数,通过地址的比较来判断是否为相同对象。由此可知,其他类在不重写equals方法时都将默认使用地址来判断是否相同。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Object的toString方法返回本对象的类名+@+16进制哈希值组成的字符串。
protected native Object clone() throws CloneNotSupportedException;
Object的clone方法依然是一个本地方法,然而像下面这样直接调用会报java.lang.CloneNotSupportedException: me.clone.Car
at java.lang.Object.clone(Native Method)这样的一个异常,必须实现Cloneable接口才可以
package me.clone;
public class Car {
private int price;
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public Car() {
price = (int) (Math.random() * 10000);
}
public Car f1() {
Car cc = null;
try {
cc = (Car) this.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
return cc;
}
}
}
package me.clone;
public class Test {
Car c = new Car();
public static void main(String[] args) {
Car car1 = new Car();
System.out.println(car1.getPrice());
Car car2 = car1.f1();
System.out.println(car2.getPrice());
}
}
public class Car implements Cloneable {
}
像这样定义就不会有问题了
protected void finalize() throws Throwable { }
finalize方法由垃圾回收机制调用