Object类

 “万物皆对象” - 万物皆  是   对象

                      is - a  

                      extends

【Object类】

 java.lang.Object - 对象,java中所有类型的父类

 

 * java.lang

  java的语言包,使用这个包中的类不需要导包

 

 1. 构造器

  Object只有一个默认的无参构造

 

 2. 方法

  protected Object clone()

创建并返回此对象的一个副本。(复制品)

本类,本包子类中才能使用

除了数组以外,子类需要实现cloneable接口(空的接口,标志接口)才能使用clone方法

 

问题:重写父类方法时,能不能修改访问修饰符?

看情况,访问范围只能变大,不能变小

 

public  boolean equals(Object obj)

  api中不写访问修饰符,不是表示default,而是public

 

判断两个对象是否“相等”,

equals的默认实现就是==,本质就是判断2个引用是否指向同一个对象

但是可以通过重写equals方法修改它的实现过程(比较依据)

重写equals方法需要注意5项原则

equals 方法在非空对象引用上实现相等关系:

  1. 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
  2. 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
  3. 传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
  4. 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。

 

 

  protected void finalize()

 

1. 垃圾:没有引用指向的对象

2. 当这种对象被回收时,就会调用一次此方法

3. 默认没有实现过程

4. 可以通过重写这个方法,在对象被回收时,顺便回收一些别的垃圾对象

很不建议这样做

 

  Class<?> getClass()

返回类对象

 

  int hashCode()

 返回该对象的哈希码值。

 

3个规定:

1. 同一个对象,多次调用hashCode结果【必须】一致

2. equals认为相等的对象,hashCode的结果【必须】一致

3. equals认为不相等的对象,hashCode的结果【最好】不一致

 

* 只要重写了equals方法,第2个规定必然会不满足

所以重写equals必须也重写hashCode方法,使得其满足条件2

 

  String toString()

变成字符串

默认实现 类名@哈希值

往往可以通过重写这个方法,来打印出对象的成员属性的值,方便调试程序

 

* 问题:

为什么 String、StringBuilder、StringBuffer 对象直接打印的时候是内容,

而我自己写的Student类 打印出来却是 com.bwf.Student@65fea7 ?  

因为这些类型已经重写过toString方法了,而我自己的类没有重写

 

* 问题

为什么 String类型比较内容要用equals方法,而我自己的类用equals和==是一样的?

因为 String 类型已经重写过 equals方法了

 

其他方法

   void notify()  

   void notifyAll()

   void wait()

   void wait(long timeout)  

   void wait(long timeout, int nanos)  

都是在线程控制中使用,以后再说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值