首页 > 学院 > 开发设计 > 正文

阅读Object类源码

2019-11-06 07:36:10
字体:
来源:转载
供稿:网友
java中,Object类是所有类的父类,其位于java.lang 包下。从源码中可以看出其定义了13个方法,但是浏览源码后并没有看到显示定义public Object() 构造函数,估计是设计者使用了默认构造函数。

       

    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.Carat 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 {
}
像这样定义就不会有问题了

Object的notify与wait设计到多线程的部分并且是final native修饰的不可以被重写

 protected void finalize() throws Throwable { }    finalize方法由垃圾回收机制调用


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表