阅读Object类源码

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


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

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








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值